Linq Liste der Listen zu einzelnen Liste

201

Scheint so, als wäre dies bereits beantwortet worden, aber ich kann es nicht finden.

Meine Frage ist ziemlich einfach: Wie kann ich dies in einer Anweisung tun, damit ich, anstatt die leere Liste neu zu erstellen und dann in der nächsten Zeile zu aggregieren, eine einzelne linq-Anweisung haben kann, die meine endgültige Liste ausgibt. Details ist eine Liste von Elementen, die jeweils eine Liste von Residenzen enthalten. Ich möchte nur alle Residenzen in einer flachen Liste.

var residences = new List<DAL.AppForm_Residences>();
details.Select(d => d.AppForm_Residences).ToList().ForEach(d => residences.AddRange(d));
Jarrett Widman
quelle

Antworten:

316

Sie möchten die SelectManyErweiterungsmethode verwenden.

var residences = details.SelectMany(d => d.AppForm_Residences).ToList();
Noldorin
quelle
3
Vielen Dank. @JaredPar hat die Auswahl aus dem falschen Element, aber ich danke Ihnen beiden für Ihre Anleitung.
Jarrett Widman
51

Verwenden Sie SelectMany

var all = residences.SelectMany(x => x.AppForm_Residences);
JaredPar
quelle
35

Hier ist ein Beispielcode für Sie:

List<int> listA = new List<int> { 1, 2, 3, 4, 5, 6 };

List<int> listB = new List<int> { 11, 12, 13, 14, 15, 16 };

List<List<int>> listOfLists = new List<List<int>> { listA, listB };

List<int> flattenedList = listOfLists.SelectMany(d => d).ToList();

foreach (int item in flattenedList)
{
    Console.WriteLine(item);
}

Und die Ausgabe wird sein:

1
2
3
4
5
6
11
12
13
14
15
16
Press any key to continue . . .
Wilson Wu
quelle
29

Und für diejenigen, die die Syntax des Abfrageausdrucks möchten: Sie verwenden zwei from- Anweisungen

var residences = (from d in details from a in d.AppForm_Residences select a).ToList();
Sean B.
quelle