2009-07-17 4 views
137

On dirait que c'est le genre de chose qui aurait déjà été répondu, mais je suis incapable de le trouver. Ma question est assez simple, comment puis-je faire ceci en une seule instruction afin qu'au lieu d'avoir à recréer la liste vide et ensuite agréger dans la ligne suivante, que je puisse avoir une seule instruction linq qui produit ma liste finale. les détails sont une liste d'articles qui contiennent chacun une liste de résidences, je veux juste que toutes les résidences soient dans une liste à plat.Linq liste des listes à liste unique

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

Copie possible de [Comment fusionner une liste de listes avec le même type d'éléments à une seule liste d'éléments?] (Http://stackoverflow.com/questions/1191054/how-to-merge-a-list-of- lists-with-same-type-of-items-to-a-single-list-of-items) – Dzyann

Répondre

202

Vous souhaitez utiliser la méthode d'extension SelectMany.

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

Merci. @JaredPar a la sélection du mauvais élément, mais merci à vous deux pour vos conseils. –

39

Utilisez SelectMany

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

Et pour ceux qui veulent la syntaxe d'expression de requête: vous utilisez deux de déclarations

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

Il y a un exemple de code pour vous:

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

Et à mettre sera:

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

Cela m'a aidé à comprendre et à appliquer à mes données. Crier. – sobelito

+0

merci pour expliquer parfaitement et montrer la production – Ali7091

Questions connexes