Cómo obtener valores de IGrouping

Tengo una pregunta sobre IGrouping y el método Select ().

Digamos que tengo IEnumerable<IGrouping> de esta manera:

 var groups = list.GroupBy(x => x.ID); 

donde lista es una List .

Y ahora necesito pasar los valores de cada IGrouping a otra lista de alguna manera .:

 foreach (var v in structure) { v.ListOfSmth = groups.Select(...); // <- ??? } 

¿Alguien puede sugerir cómo obtener valores ( List ) de IGrouping en dicho contexto?

Dado que IGrouping implementa IEnumerable , puede usar SelectMany para volver a poner todos los IEnumerables en un IEnumerable todos juntos:

 List list = new List(); IEnumerable> groups = list.GroupBy(x => x.id); IEnumerable smths = groups.SelectMany(group => group); List newList = smths.ToList(); 
 foreach (var v in structure) { var group = groups.Single(g => g.Key == v. ??? ); v.ListOfSmth = group.ToList(); } 

Primero, debe seleccionar el grupo deseado. Luego puede usar el método ToList en el grupo. El IGrouping es un IEnumerable de los valores.

De la definición de IGrouping:

 IGrouping : IEnumerable, IEnumerable 

simplemente puede iterar a través de elementos como este:

 IEnumerable> groups = list.GroupBy(x => x.ID) foreach(IEnumerable element in groups) { //do something } 

Una versión más clara de las respuestas anteriores:

 IEnumerable> groups = list.GroupBy(x => x.PropertyIntOfClassA); foreach (var groupingByClassA in groups) { int propertyIntOfClassA = groupingByClassA.Key; //iterating through values foreach (var classA in groupingByClassA) { int key = classA.PropertyIntOfClassA; } }