236 votes

Linq liste de listes vers liste unique

Il me semble que c'est le genre de chose qui aurait déjà été répondu mais je n'arrive pas à la trouver.

Ma question est assez simple, comment puis-je faire cela en une seule instruction de sorte qu'au lieu d'avoir à créer la nouvelle liste vide puis à l'agréger dans la ligne suivante, je puisse avoir une seule instruction linq qui produise ma liste finale. Les détails sont 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<DAL.AppForm_Residences>();
details.Select(d => d.AppForm_Residences).ToList().ForEach(d => residences.AddRange(d));

384voto

Noldorin Points 67794

Vous voulez utiliser le SelectMany méthode d'extension.

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

3 votes

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

58voto

JaredPar Points 333733

Utiliser SelectMany

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

47voto

Wilson Wu Points 179

Voici un exemple de code pour vous :

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

Et le résultat sera :

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

33voto

Sean B Points 2086

Et pour ceux qui veulent la syntaxe de l'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();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X