拥有IEnumerable<Order> orders
,如何Dictionary<string, IEnumerable<Order>>
使用Linq,其中密钥Order.CustomerName
映射到IEnumerable
客户的订单.
orders.ToDictionary(order => order.CustomerName)
不会马上工作,因为可能有多个订单可能具有相同的CustomerName.
解: orders.ToLookup(order => order.CustomerName);
spe*_*der 33
所述ILookup接口被设计用于此目的,并且表示包含每个键许多值的字典状结构.它具有与字典相似的性能特征(即它是一个哈希表类型结构)
您可以使用.ToLookup扩展方法创建ILookup,如下所示:
ILookup<string, Order> ordersLookup = orders.ToLookup(o => o.CustomerName)
Run Code Online (Sandbox Code Playgroud)
然后:
IEnumerable<Order> someCustomersOrders = ordersLookup[someCustomerName];
Run Code Online (Sandbox Code Playgroud)
Chr*_*air 13
只是替代@splander的答案,如果你真的想要一个类型Dictionary<string, IEnumerable<Order>>
,你可以使用:
Dictionary<string, IEnumerable<Order>> dictionary = orders
.GroupBy(order => order.CustomerName)
.ToDictionary(groupedOrders => groupedOrders.Key,
groupedOrders => (IEnumerable<Order>)groupedOrders);
Run Code Online (Sandbox Code Playgroud)
我确信有一个更好的方式,但那也会这样做.
或者你可以简单地使用
orders.ToLookup(o => o.CustomerName).ToDictionary(g => g.Key)
Run Code Online (Sandbox Code Playgroud)
但正如Spender的回答所示,也许你不需要最后一种方法,ToDictionary
.