首页 > 解决方案 > linq 组查询中的产品销售数量和名称

问题描述

我有一个产品销售数据,想显示按产品 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。

标签: linqgroup-by

解决方案


将 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)
                      };

推荐阅读