c# - LINQ 连接、分组和求和(或任何聚合)

标签 c# linq group-by aggregate

有订单表头和明细表,想要抓取所有表头列并从明细中附加总订单数量。

我正在尝试做什么(伪sql):

select Header.*, sum(Details.Quantity)
from Header
join Details on Details.HeaderID = Header.ID
group by HeaderID

为了避免重写所有标题列(有很多),我创建了一个新对象,如下所示:

public class OrderView 
{
    public Header Header { get; set; }
    public int? TotalQuantity { get; set; }
}

我悲伤地试图填补它:

var results = from oh in db.Header
              join od in db.Details on oh.ID equals od.HeaderID                          
              where oh.Store == params.Store
                 // && ...  a bunch more search filters on Header ...
              group od by od.PID into odg
              select new OrderView() { Header = oh, TotalQuantity = odg.Sum(x => x.QTY) };

我当前尝试的第一个问题是,在 select 行中,oh 未定义,由于我对 LINQ 的无知,这让我相信所有结果 header 已发送到其他地方。

如果有我在搜索中没有看到的此类查询的最佳实践,我完全可以放弃整个查询并以不同的方式进行处理。

最佳答案

你的意思是这样的?我假设od.PID真的是od.HeaderID (= oh.ID ) 来自你的“我正在尝试做的事情”中的 pesudo-sql, oh.ID db.Header 中的每一行都是唯一的(可能是 PK?)因此您可以按行本身分组。

var results = from oh in db.Header
              join od in db.Details on oh.ID equals od.HeaderID                          
              where oh.Store == params.Store
                 // && ...  a bunch more search filters on Header ...
              group od by oh into odg
              select new OrderView() 
              {
                  Header = odg.Key, 
                  TotalQuantity = odg.Sum(x => x.QTY) 
              };

关于c# - LINQ 连接、分组和求和(或任何聚合),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11456856/

相关文章:

c# - 通用存储库扩展 : Inheritance vs. 扩展方法

c# - Windows 服务和 Exchange 服务器之间的通信

c# - 使用 LINQ 和 mysqlconnection 遇到 fatal error

javascript - 是否有类似于 JavaScript 中的 .Map() 的 C# 函数?

pandas - 新列中的组计数

Scala groupBy : Want array indices satisfying predicate, 不是数组值

c# - Knockout 选择显示 optionsText 的对象对象

c# - 您网站上的多个 signalR 连接/集线器

vb.net - VB.net 中的 LINQ 语句

python - 如何对DataFrame的列进行分类和计数?