2010-07-16 36 views
17

Ich arbeite gerade durch die Lernkurve, die LINQ ist, und ich könnte wirklich etwas Hilfe gebrauchen. Ich weiß nicht, ob das, was ich will, möglich ist, aber wenn ich wetten müsste, wette ich, dass es das ist.LINQ - Alle Elemente in einer Liste in einer Liste abrufen?

Ich habe derzeit eine Liste von Objekten namens _tables und jedes dieser Objekte enthält eine weitere Liste von Objekten, die über die Eigenschaft "Indizes" verfügbar gemacht werden. Im Wesentlichen möchte ich mit einer Liste enden, die alle Indizes von allen _tables enthält.

Hier ist, was ich bisher:

var indexes = from TableInfo tab 
       in _tables 
       where tab.Indexes.Count > 0 
       select tab.Indexes; 

Leider scheint mir eine andere Liste der Listen zu geben, aber nur dort, wo die Indizes Liste mehr als einen Wert enthält ... Gibt es eine Möglichkeit zu Holen Sie alle diese Listen ohne Schleifen zusammen?

Antwort

34

Sie möchten die Erweiterungsmethode SelectMany verwenden.

+0

Lesen Sie einfach diese: http://community.bartdesmet.net/blogs/bart/archive/2008/08/19/wahrscheinlich-die-meisten-machtvolle-linq-operator-selectmany.aspx –

5

Zusätzlich zu tbischel Antwort, die Abfrage Ausdruck Version von dem, was Sie für gehen, ist unten.

var indexes = from TableInfo tab in _tables 
       from index in tab.Indexes 
       select index; 
4

Sie brauchen nicht die where-Klausel und Sie sollten auch nicht brauchen, es zu sagen, welche Registerkarte

ist Und Sie werden Select

var indexes = (from tab in _tables).SelectMany(t => t.Indexes) 

verwenden müssen, oder Sie tun können, es mag diese

var indexes = from tab in _tables 
        from t in tab.Indexes 
        select t; 

, die ein wenig vertrauter syntaz sein sollte

2
var rows = from item in table select item; 
Verwandte Themen