Cómo obtener valores de IGrouping
Tengo una pregunta sobre IGrouping
el Select()
método.
Digamos que tengo un IEnumerable<IGrouping<int, smth>>
de esta manera:
var groups = list.GroupBy(x => x.ID);
Dónde list
está un 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 an IGrouping<int, smth>
en tal contexto?
Desde IGrouping<TKey, TElement>
implements IEnumerable<TElement>
, puedes usar SelectMany
para poner todo IEnumerables
en uno, 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();
Aquí hay un ejemplo que compila/ejecuta: https://dotnetfiddle.net/DyuaaP
Video comentario de esta solución: https://youtu.be/6BsU1n1KTdo
foreach (var v in structure)
{
var group = groups.Single(g => g.Key == v. ??? );
v.ListOfSmth = group.ToList();
}
Primero debe seleccionar el grupo deseado. Entonces puedes usar el ToList
método de en el grupo. El IGrouping
es uno IEnumerable
de los valores.
Versión más aclarada 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;
}
}