LINQ两次对数据进行分组

5

非常抱歉标题有些糟糕,我不太确定如何表达我的问题。

我有一个看起来像这样的对象:

CustAcct cust = new CustAcct();
cust.Name = "John Doe";
cust.Account = "ABC123";
cust.OrderTotal = 123.43
cust.OrderQty = 4;
cust.TransDate = "12/26/2010 13:00"

请不要花太多时间批评接下来的部分,因为这与购物车/客户相关的内容无关,但想法是相同的,我只是想使用大家都比较熟悉的东西。
一个账户可以有多个客户,一个客户也可以有多个账户。
所以你会有:
List<CustAcct> custList = new List<CustAcct>();
custList.Add("John Doe", "ABC123", 123.43, 4, "12/26/2010 13:00");
custList.Add("John Doe", "ABC123", 32.12, 2, "12/27/2010 10:00");
custList.Add("John Doe", "ABC321", 43.34, 1, "12/28/2010 15:00");
custList.Add("John Doe", "ABC321", 54.60, 3, "12/28/2010 16:00");
custList.Add("Jane Zoe", "ABC123", 46.45, 2, "12/28/2010 17:00");
custList.Add("Jane Zoe", "ABC123", 32.65, 1, "12/29/2010 12:00");
custList.Add("Jane Zoe", "ABC321", 67.65, 3, "12/29/2010 23:00");
custList.Add("Jane Zoe", "ABC321", 75.34, 4, "12/30/2010 08:00");

我希望做的是获取每个客户和账号所有订单总金额和订单数量的总和,使输出结果如下:
```` 我是一个段落 ````
Account    Customer    OrderTotal    OrderQty
 ABC123     John Doe    155.55          6
 ABC321     John Doe     97.94          4
 ABC123     Jane Zoe     79.10          3
 ABC321     Jane Zoe    142.99          7

我已经学习了关于LINQ to Objects的书籍和101个LINQ示例,但是还无法弄清楚如何获取这个。谢谢。


你是使用方法语法还是查询语法? - Mark Byers
我正在使用查询语法。from c in CustList... - Stephen Gilboy
你想按账户/客户组合进行分组吗?还是先按客户分组,再按账户分组?这是微妙的差别,但会影响我的回答... - James Michael Hare
通过账户/客户组合 - Stephen Gilboy
1个回答

9
您可以这样进行分组和求和:
from ca in custList
group ca by new { ca.Name, ca.Account } into g
select new {
    g.Key.Account,
    g.Key.Name,
    OrderTotal = g.Sum(o => o.OrderTotal),
    OrderQty = g.Sum(o => o.OrderQty)
};

点击此处查看演示.


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接