2009-07-17 17 views
137

Wygląda na to, że coś takiego zostało już odebrane, ale nie mogę go znaleźć.Lista list Linq do pojedynczej listy

Moje pytanie jest dość proste, jak mogę to zrobić w jednym poleceniu, aby zamiast mieć nową pustą listę, a następnie zagregować w następnej linii, mogę mieć jedną instrukcję linq, która wyprowadza moją ostateczną listę. szczegóły to lista przedmiotów, z których każda zawiera listę rezydencji, chcę tylko wszystkie rezydencje na płaskiej liście.

var residences = new List<DAL.AppForm_Residences>(); 
details.Select(d => d.AppForm_Residences).ToList().ForEach(d => residences.AddRange(d)); 
+1

Możliwy duplikat [Jak scalić listę list z tym samym typem przedmiotów do pojedynczej listy pozycji?] (Http://stackoverflow.com/questions/1191054/how-to-merge-a-list-of- listy-z tym samym typem pozycji do pojedynczej listy pozycji) – Dzyann

Odpowiedz

202

chcesz użyć metody SelectMany przedłużacza.

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

Dzięki. @JaredPar ma wybór z niewłaściwego elementu, ale dziękuję obojgu za wskazówki. –

39

Zastosowanie SelectMany

var all = residences.SelectMany(x => x.AppForm_Residences); 
22

A dla tych, którzy chcą składnię wyrażenia kwerendy: użyć dwóch od sprawozdaniach

var residences = (from d in details from a in d.AppForm_Residences select a).ToList(); 
23

Istnieje przykładowy kod dla Ciebie:

List<List<int>> l = new List<List<int>>(); 

    List<int> a = new List<int>(); 
    a.Add(1); 
    a.Add(2); 
    a.Add(3); 
    a.Add(4); 
    a.Add(5); 
    a.Add(6); 
    List<int> b = new List<int>(); 
    b.Add(11); 
    b.Add(12); 
    b.Add(13); 
    b.Add(14); 
    b.Add(15); 
    b.Add(16); 

    l.Add(a); 
    l.Add(b); 

    var r = l.SelectMany(d => d).ToList(); 
    foreach(int i in r) 
    { 
     Console.WriteLine(i); 
    } 

A obecnie wprowadzone będzie:

1 
2 
3 
4 
5 
6 
11 
12 
13 
14 
15 
16 
Press any key to continue . . . 
+0

Pomogło mi to zrozumieć i zastosować do moich danych. Krzyczeć. – sobelito

+0

dziękuję za perfekcyjne wyjaśnienie i przedstawienie wyników – Ali7091