Ich habe eine Frage zu IGrouping
und die Select()
Methode.
Nehmen wir an, ich habe eine IEnumerable<IGrouping<int, smth>>
auf diese Weise:
var groups = list.GroupBy(x => x.ID);
wo list
ist ein List<smth>
.
Und jetzt muss ich die Werte von jedem IGrouping
auf irgendeine Weise an eine andere Liste übergeben:
foreach (var v in structure)
{
v.ListOfSmth = groups.Select(...); // <- ???
}
Kann jemand vorschlagen, wie man die Werte ( List<smth>
) aus einem IGrouping<int, smth>
solchen Kontext erhält ?
Antworten:
Seit den
IGrouping<TKey, TElement>
ImplementierungenIEnumerable<TElement>
können Sie verwendenSelectMany
, um den gesamtenIEnumerables
Rücken zu einemIEnumerable
zusammenzufügen:quelle
groups
und zu einer flachen Liste zurückzukehren.OrderBy(x => x.id)
sortiert sie in aufsteigender Reihenfolge nach ID. Vergleichen Sie dies mit.GroupBy(x => x.id).SelectMany(group => group)
, wodurch sie nach der Reihenfolge des ersten Auftretens der ID sortiert werden. Wenn die ursprünglichen IDs in der Reihenfolge [1,3,2,2,2,3,0] vorliegen, werden die IDs durch Gruppieren und anschließendes Reduzieren in einer Liste in die neue Reihenfolge gebracht: [1,3,3, 2,2,2,0].Zuerst müssen Sie die gewünschte Gruppe auswählen. Dann können Sie die
ToList
Methode von für die Gruppe verwenden. DasIGrouping
ist einerIEnumerable
der Werte.quelle
Klarere Version der obigen Antworten:
quelle
Aus der Definition von IGrouping:
Sie können einfach durch folgende Elemente iterieren:
quelle