recortar - string c# ejemplos
IEnumerable<T> al diccionario<cadena, IEnumerable<T>> usando LINQ (3)
Al IEnumerable<Order> orders
, cómo obtener un Dictionary<string, IEnumerable<Order>>
usando Linq, donde la clave es Order.CustomerName
asignada a un IEnumerable
de las órdenes del cliente.
orders.ToDictionary(order => order.CustomerName)
no funcionará de inmediato, ya que podría haber varios pedidos que podrían tener el mismo CustomerName.
Solución: orders.ToLookup(order => order.CustomerName);
La interfaz ILookup está diseñada para este propósito y representa una estructura similar a un diccionario que contiene muchos valores por clave. Tiene características de rendimiento similares a las de un diccionario (es decir, es una estructura de tipo de tabla hash)
Puede crear un ILookup utilizando el método de extensión .ToLookup siguiente manera:
ILookup<string, Order> ordersLookup = orders.ToLookup(o => o.CustomerName)
entonces:
IEnumerable<Order> someCustomersOrders = ordersLookup[someCustomerName];
O probablemente podría simplemente usar
orders.ToLookup(o => o.CustomerName).ToDictionary(g => g.Key)
Pero como indica la respuesta de Spender, quizás no necesite el último método, ToDictionary
.
Solo una alternativa a la respuesta de @ spender, si realmente desea un tipo de Dictionary<string, IEnumerable<Order>>
, puede usar:
Dictionary<string, IEnumerable<Order>> dictionary = orders
.GroupBy(order => order.CustomerName)
.ToDictionary(groupedOrders => groupedOrders.Key,
groupedOrders => (IEnumerable<Order>)groupedOrders);
Estoy seguro de que hay una mejor manera, pero eso también lo hará.