Tengo una pregunta sobre IGroupingy el Select()método.
Digamos que tengo un IEnumerable<IGrouping<int, smth>>de esta manera:
var groups = list.GroupBy(x => x.ID);
donde listesta a List<smth>.
Y ahora necesito pasar los valores de cada uno IGroupinga 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 usarSelectManypara poner todo deIEnumerablesnuevo en unoIEnumerabletodo junto:fuente
groupsy 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
ToListmétodo de en el grupo. ElIGroupinges unoIEnumerablede 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