2010-11-28 5 views
2

peut pas vraiment comprendre comment la sélection méthode d'extension fonctionne avec une liste dans une autre liste, comme ceci:Listes imbriquées, comment je peux le faire avec l'expression lambda?

var queries = (from item in list 
       from item2 in list.anotherlist 
       select item2).ToList<MyType>(); 

Cela ne fonctionnera pas:

// Gives me a list of List<QueryResult> 
var queries = list.Select(item => item.anotherlist).ToList(); 

Répondre

5

L'opérateur SelectMany devrait faire l'affaire - dans ce cas, il faut une liste de listes et aplatit:

var queries = list.SelectMany(sublist => sublist).ToList(); 
+0

Merci, de travailler. – gremo

+0

+1. Juste pour être complet, j'ajouterai que 'from ... from ... select ... 'dans une expression LINQ est en fait équivalent à' SelectMany'; cela ne se traduira pas par 'Select'. Voir par exemple [Cette question a été rédigée par Bart de Smet] (http://bartdesmet.net/blogs/bart/archive/2008/08/30/c-3-0-query-expression-translation-cheat-sheet.aspx) ou la [spécification C# 3.0] (http://download.microsoft.com/download/3/8/8/388e7205-bc10-4226-b2a8-75351c669b09/CSharp%20Language%20Specification.doc), section 7.15.2.4 . – stakx

0

utilisation SelectMany

var queries = list.SelectMany(l => l.anotherList).ToList(); 
Questions connexes