Linq liste de listes à liste unique

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 cela dans une seule déclaration afin que, au lieu d’avoir à renouveler la liste vide puis à agréger dans la ligne suivante, je puisse avoir une seule instruction linq qui produise ma liste finale. détails est une liste d’éléments qui contiennent chacun une liste de résidences, je veux juste toutes les résidences dans une liste plate.

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

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

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

Utilisez SelectMany

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

Il y a un exemple de code pour vous:

  List> l = new List>(); List a = new List(); a.Add(1); a.Add(2); a.Add(3); a.Add(4); a.Add(5); a.Add(6); List b = new List(); 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 la sortie sera:

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

Et pour ceux qui veulent la syntaxe de l’expression de requête: vous utilisez deux des instructions

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