2010-11-28 7 views
2

Kann nicht wirklich verstehen, wie die select-Extension-Methode mit einer Liste in einer anderen Liste arbeitet, wie folgt aus:Verschachtelte Listen, wie kann ich das mit Lambda-Ausdruck machen?

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

Das wird nicht funktionieren:

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

Antwort

5

Der Select Operator sollte den Trick tun - in diesem Fall dauert es eine Liste von Listen und flacht es:

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

Danke, funktioniert. – gremo

+0

+1. Nur der Vollständigkeit halber werde ich hinzufügen, dass 'von ... von ... auswählen ...' in einem LINQ-Ausdruck tatsächlich äquivalent zu 'SelectMany' ist; Es wird nicht in 'Select' übersetzt. Siehe z.B. [Dieser Abfrageübersetzungs-Spickzettel von Bart de Smet] (http://bartdesmet.net/blogs/bart/archive/2008/08/30/c-3-0-query-expression-translation-cheat-sheet.aspx) oder die [C# 3.0 Spezifikation] (http://download.microsoft.com/download/3/8/8/388e7205-bc10-4226-b2a8-75351c669b09/CSharp%20Language%20Specification.doc), Abschnitt 7.15.2.4 . – stakx

0

Verwendung Select

var queries = list.SelectMany(l => l.anotherList).ToList(); 
Verwandte Themen