He escrito un método que toma una colección de artículos (artículos de precio - cada artículo tiene una cantidad y un código) y los agrupa por código y luego devuelve un IDictionary donde la clave es el código del artículo y el valor es el grupo de artículos con ese códigoAgrupar una colección y devolver un Dictionary
Aquí está la implementación del método (la esperanza que tiene sentido!):
public IDictionary<string, IEnumerable<PriceDetail>> GetGroupedPriceDetails(IEnumerable<PriceDetail> priceDetails)
{
// create a dictionary to return
var groupedPriceDetails = new Dictionary<string, IEnumerable<PriceDetail>>();
// group the price details by code
var grouping = priceDetails.GroupBy(priceDetail => priceDetail.Code);
// foreach grouping, add the code as key and collection as value to the dictionary
foreach (var group in grouping)
{
groupedPriceDetails.Add(group.Key, group);
}
// return the collection
return groupedPriceDetails;
}
luego trató de refactorizar esto para usar ToDictionary como tal :
// group the price details by code and return
return priceDetails.GroupBy(priceDetail => priceDetail.Code)
.ToDictionary(group => group.Key, group => group);
Aparece un error cuando intento compilar lo que dice que no puedo convertir un diccionario de string, IGrouping<string, PriceDetail>
en un diccionario de string, IEnumerable<PriceDetail>
.
¿Alguien me puede decir cómo refactorizar correctamente mi primer intento de este método? ¡Siento que hay una manera más concisa de escribirlo pero no puedo resolverlo!
que quiero la colección volvieron a ser introducido por el código, y el valor para cada clave debe ser la colección de PriceDetails para ese código - entonces>. ¿Puedo hacer eso con tu método? –
Si se está transformando en un diccionario solo por la capacidad de buscar un código y obtener una colección, sin la intención de modificar aún más el diccionario, ILookup es una mejor coincidencia. – Wilhelm
El siguiente en el proceso después de haber regresado de este método es iterar a través de la colección (por lo tanto, para cada grupo) y sumar el monto de la recopilación de detalles del precio para ese grupo. ¿Me estoy perdiendo de algo? ¿Puedo hacer eso usando ILookup en su lugar? O bien, ahora que estoy escribiendo esto, creo que debería devolver algo que tenga el código como clave y luego una cantidad que sea la suma y hacerlo todo en un solo método ... ¡cualquier sugerencia muy apreciada! –