2008-10-28 14 views
10

public class Artikel { ... }Holen Sie sich ein IEnumerable <T> aus einem IEnumerable <IEnumerable <T>>

public class Order 
{ 
    public List<Item> Items 
    ... 
} 

public class Customer 
{ 
    public List<Order> Orders 
    ... 
} 

nun mit LINQ Ich brauche alle Einzelteile zu erhalten, die ein Kunde gekauft hat. Wie kann ich?

Ich habe so etwas wie var items = from o in cust.Orders select o.Items; versucht, aber das Ergebnis ist IEnuberable<List<Item>> und ich möchte nur eine IEnumerable<Item>.

Ich möchte hier versuchen zu vermeiden, 2 Schleifen zu codieren.

Antwort

20

Sie benötigen SelectMany, die in Abfrageausdrücken als zweite dargestellt wird (und nachfolgende) from Klauseln:

var items = from order in customer.Orders 
      from item in order.Items 
      select item; 

Alternativ Abfrageausdrücke zu ignorieren:

var items = customer.Orders.SelectMany(order => order.Items); 
+2

Select schön ist! :-) –