Получить IEnumerable <T>из IEnumerable <IEnumerable <T>> - PullRequest
10 голосов
/ 28 октября 2008

Публичный класс { ... }

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

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

Теперь, используя LINQ, мне нужно получить все товары, которые купил клиент. Как я могу?

Я пробовал что-то вроде var items = from o in cust.Orders select o.Items;, но результат IEnuberable<List<Item>>, и я хочу только один IEnumerable<Item>.

Я прошу здесь попытаться избежать кодирования 2 циклов.

1 Ответ

20 голосов
/ 28 октября 2008

Вам нужно SelectMany, которое представлено в выражениях запроса как второе (и последующее) from предложения:

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

В качестве альтернативы, чтобы игнорировать выражения запроса:

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