c# linq select igrouping

c# - Cómo obtener valores de IGrouping



linq select (4)

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

Digamos que tengo IEnumerable<IGrouping<int, smth>> de esta manera:

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

donde lista es una List<smth> .

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<smth> ) de IGrouping<int, smth> en dicho contexto?


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

List<smth> list = new List<smth>(); IEnumerable<IGrouping<int, smth>> groups = list.GroupBy(x => x.id); IEnumerable<smth> smths = groups.SelectMany(group => group); List<smth> newList = smths.ToList();


De la definición de IGrouping:

IGrouping<out TKey, out TElement> : IEnumerable<TElement>, IEnumerable

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

IEnumerable<IGrouping<int, smth>> groups = list.GroupBy(x => x.ID) foreach(IEnumerable<smth> element in groups) { //do something }


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

IEnumerable<IGrouping<int, ClassA>> 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; } }


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.