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 组查询中的产品销售数量和名称的主要内容,如果未能解决你的问题,请参考以下文章