在LINQ中按多个枚举分组

时间:2011-07-15 14:15:34

标签: c# linq

我有2个列表,其中包含我创建的自定义类的条目。基本上,每个列表包含客户订单 - 但它们来自2个不同的来源,因此是2个列表。两个列表都是相同的类型(我的自定义类),并且有一个字段用于标识订单所属的客户。

我想要做的是制作一个新列表,其中包含在任一列表中有订单的每个客户,以及两个列表中订单的计数。因此,它们将是3个字段:客户的ID,列表1中的订单数量以及列表2中的订单数量。

我知道有很多方法可以做到这一点,但我想到的所有方式似乎都是不必要的复杂。有没有办法可以做到这一点?

1 个答案:

答案 0 :(得分:2)

这样的事情将是进一步调整的良好起点:

var ordersInList1 = list1.GroupBy(order => order.CustomerId)
                         .ToDictionary(g => g.Key, g => g.Count());
var ordersInList2 = list2.GroupBy(order => order.CustomerId)
                         .ToDictionary(g => g.Key, g => g.Count());

var results = ordersInList1.Keys.Union(ordersInList2.Keys)
                           .Select(id =>
                           new { 
                                CustomerId = id, 
                                CountOrders1 = ordersInList1[id], 
                                CountOrders2 = ordersInList2[id]
                           })
                           .ToArray();