linq 组查询中的产品销售数量和名称

Posted

技术标签:

【中文标题】linq 组查询中的产品销售数量和名称【英文标题】:product sale qty sum and name in linq group query 【发布时间】:2021-11-04 00:43:42 【问题描述】:

我有一个产品销售数据,想显示按产品 ID 分组的销售摘要。 汇总结果应显示产品名称和总销售额。如何选择一个字段以及 groupby 结果并且该字段不是关键字段。

public partial class SaleOrderDetail

    public int Id  get; set; 
    public int ProductId  get; set; 
    public string ProductName  get; set; 
    public int Quantity  get; set; 
    public decimal Price  get; set; 
    public decimal LineTotal  get; set; 


var query = from saleorder in _dbContext.SaleOrderDetail
                      group saleorder by saleorder.ProductId into salesummary
                      select new
                      
                          productid = salesummary.Key,
                          prdouctname = salesummary.First().ProductName,
                          totalqty = salesummary.Sum(s => s.Quantity)
                      ;

由于产品名称的 First(),我收到错误 invalidoperationException。

【问题讨论】:

【参考方案1】:

您必须在分组密钥中包含ProductName

var query = 
    from saleorder in _dbContext.SaleOrderDetail
    group saleorder by new saleorder.ProductId, saleorder.ProductName into salesummary
    select new
    
        productid = salesummary.Key.ProductId,
        prdouctname = salesummary.Key.ProductName,
        totalqty = salesummary.Sum(s => s.Quantity)
    ;

【讨论】:

【参考方案2】:

将 SaleOrderDetail 设置为 AsEnumerable() 就可以了。对于 SQL 表达式,如果将其设置为 AsEnumerable() 或 .ToList 等,它将起作用。

var query = from saleorder in _dbContext.SaleOrderDetail.AsEnumerable()
                      group saleorder by saleorder.ProductId into salesummary
                      select new
                      
                          productid = salesummary.Key,
                          prdouctname = salesummary.First().ProductName,
                          totalqty = salesummary.Sum(s => s.Quantity)
                      ;

【讨论】:

以上是关于linq 组查询中的产品销售数量和名称的主要内容,如果未能解决你的问题,请参考以下文章

如何编写从多个表中获取多行数量总和的查询?

利用SQL查询每一个雇员销售图书的数量

如何用数据库mysql查询产品的产品编号和销售数量的总和

SQL - 我需要显示 2012 年销售的商品名称、商品价格和数量

SQL按时间统计客户的月销售量和年销售量

SQL Server 2008 R2-查询以获取按月销售的总销售额和数量