Линк список списков в один список

202

Похоже, это та вещь, на которую уже ответили, но я не могу ее найти.

Мой вопрос довольно прост, как я могу сделать это в одном операторе, чтобы вместо того, чтобы создавать новый пустой список и затем агрегировать в следующей строке, у меня мог быть один оператор linq, который выводит мой окончательный список. подробная информация представляет собой список элементов, каждый из которых содержит список домов, я просто хочу, чтобы все дома были в едином списке.

var residences = new List<DAL.AppForm_Residences>();
details.Select(d => d.AppForm_Residences).ToList().ForEach(d => residences.AddRange(d));
Джарретт Видман
источник

Ответы:

317

Вы хотите использовать SelectManyметод расширения.

var residences = details.SelectMany(d => d.AppForm_Residences).ToList();
нолдорин
источник
3
Спасибо. @JaredPar имеет неправильный выбор, но спасибо вам обоим за руководство.
Джарретт Видман
51

Используйте SelectMany

var all = residences.SelectMany(x => x.AppForm_Residences);
JaredPar
источник
35

Вот пример кода для вас:

List<int> listA = new List<int> { 1, 2, 3, 4, 5, 6 };

List<int> listB = new List<int> { 11, 12, 13, 14, 15, 16 };

List<List<int>> listOfLists = new List<List<int>> { listA, listB };

List<int> flattenedList = listOfLists.SelectMany(d => d).ToList();

foreach (int item in flattenedList)
{
    Console.WriteLine(item);
}

И результат будет:

1
2
3
4
5
6
11
12
13
14
15
16
Press any key to continue . . .
Уилсон Ву
источник
29

А для тех, кому нужен синтаксис выражения запроса: вы используете два оператора from

var residences = (from d in details from a in d.AppForm_Residences select a).ToList();
Шон Б
источник