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));

Antworten:


316

Sie möchten die SelectManyErweiterungsmethode verwenden.

var residences = details.SelectMany(d => d.AppForm_Residences).ToList();

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);

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 . . .

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();
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.