2008-10-28 17 views
10

public class artículo { ... }Obtener un IEnumerable <T> de un IEnumerable <IEnumerable <T>>

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

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

Ahora, usando LINQ que necesito para obtener todos los artículos que compraron un cliente. ¿Cómo puedo?

Intenté algo así como var items = from o in cust.Orders select o.Items; pero el resultado es IEnuberable<List<Item>> y quiero solo uno IEnumerable<Item>.

Pregunto aquí para intentar evitar la codificación de 2 bucles.

Respuesta

20

Es necesario SelectMany, que se representa en las expresiones de consulta como la segunda (y posterior) from cláusulas:

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

Alternativamente, hacer caso omiso de las expresiones de consulta:

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

SelectMany es agradable! :-) –

Cuestiones relacionadas