在LINQ中按多个枚举值分组

本文关键字:枚举 LINQ | 更新日期: 2023-09-27 18:02:06

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

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

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

在LINQ中按多个枚举值分组

像这样的东西将是进一步调整的一个很好的起点:

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();