Tengo una pregunta sobre IGrouping
y el Select()
método.
Digamos que tengo un IEnumerable<IGrouping<int, smth>>
de esta manera:
var groups = list.GroupBy(x => x.ID);
donde list
esta a List<smth>
.
Y ahora necesito pasar los valores de cada uno IGrouping
a otra lista de alguna manera:
foreach (var v in structure)
{
v.ListOfSmth = groups.Select(...); // <- ???
}
¿Alguien puede sugerir cómo obtener los valores ( List<smth>
) de un IGrouping<int, smth>
en ese contexto?
Respuestas:
Desde
IGrouping<TKey, TElement>
implementosIEnumerable<TElement>
, puede usarSelectMany
para poner todo deIEnumerables
nuevo en unoIEnumerable
todo junto:fuente
groups
y volver a una lista plana.OrderBy(x => x.id)
los ordenará en orden ascendente por ID. Compare esto con.GroupBy(x => x.id).SelectMany(group => group)
, que los ordenará por orden de primera aparición de ID. Si las ID originales están en el orden: [1,3,2,2,2,3,0], al agruparlas y luego aplanarlas en una lista colocará las ID en el nuevo orden: [1,3,3, 2,2,2,0].Primero debe seleccionar el grupo deseado. Entonces puede usar el
ToList
método de en el grupo. ElIGrouping
es unoIEnumerable
de los valores.fuente
Versión más aclarada de las respuestas anteriores:
fuente
De la definición de IGrouping:
puedes iterar a través de elementos como este:
fuente