Как объединить коллекцию коллекций в Linq - PullRequest
48 голосов
/ 26 ноября 2008

Я хотел бы иметь возможность объединить IEnumerable<IEnumerable<T>> в IEnumerable<T> (т.е. объединить все отдельные коллекции в одну). Операторы Union применяются только к двум коллекциям. Есть идеи?

Ответы [ 2 ]

88 голосов
/ 26 ноября 2008

Попробуйте

var it = GetTheNestedCase();
return it.SelectMany(x => x);

SelectMany - это преобразование LINQ, которое по существу говорит: «Для каждого элемента в коллекции возвращаются элементы коллекции». Он превратит один элемент во многие (отсюда и SelectMany). Это отлично подходит для разбиения коллекций коллекций в плоский список.

14 голосов
/ 22 апреля 2009
var lists = GetTheNestedCase();
return
    from list in lists
    from element in list
    select element;

- это еще один способ сделать это, используя синтаксис выражения запроса C # 3.0.

...