Eu tenho uma pergunta sobre IGrouping
e o Select()
método.
Digamos que eu tenho um IEnumerable<IGrouping<int, smth>>
desta maneira:
var groups = list.GroupBy(x => x.ID);
onde list
é uma List<smth>
.
E agora eu preciso passar valores de cada um IGrouping
para outra lista de alguma forma:
foreach (var v in structure)
{
v.ListOfSmth = groups.Select(...); // <- ???
}
Alguém pode sugerir como obter os valores ( List<smth>
) de um IGrouping<int, smth>
nesse contexto?
Respostas:
Desde os
IGrouping<TKey, TElement>
implementosIEnumerable<TElement>
, você pode usarSelectMany
para juntar todas asIEnumerables
costas de volta em umaIEnumerable
:fonte
groups
e voltar para uma lista simples.OrderBy(x => x.id)
os classificará em ordem crescente por ID. Compare isso com.GroupBy(x => x.id).SelectMany(group => group)
, que os classificará pela ordem da primeira aparição do ID. Se os IDs originais estiverem na ordem: [1,3,2,2,2,3,0], agrupá-los e achatar em uma lista colocará os IDs na nova ordem: [1,3,3, 2,2,2,0].Primeiro você precisa selecionar o grupo desejado. Então você pode usar o
ToList
método de no grupo. OIGrouping
é umIEnumerable
dos valores.fonte
Versão mais esclarecida das respostas acima:
fonte
Da definição de IGrouping:
você pode simplesmente percorrer elementos como este:
fonte