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.