2008-10-28 8 views
10

public class {article ...} Obtenez un IEnumerable <T> d'un IEnumerable <IEnumerable <T>>

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

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

Maintenant, en utilisant LINQ J'ai besoin de tous les éléments qu'un client a acheté. Comment puis-je?

J'ai essayé quelque chose comme var items = from o in cust.Orders select o.Items; mais le résultat est IEnuberable<List<Item>> et je veux juste un IEnumerable<Item>.

Je demande ici d'essayer d'éviter de coder 2 boucles.

Répondre

20

Vous avez besoin SelectMany, qui est représenté dans les expressions de requête en tant que deuxième (et après) from clauses:

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

Vous pouvez également ignorer les expressions de requête:

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

SelectMany est agréable! :-) –

Questions connexes