Linq列表列表到单个列表


201

好像这样的事情本来应该已经回答了,但是我找不到。

我的问题很简单,我如何在一个语句中执行此操作,这样我不必使用新的空列表然后在下一行进行汇总,而可以使用一个linq语句来输出我的最终列表。details是一个项目列表,每个项目都包含一个住所列表,我只想将所有住所都放在一个平面列表中。

var residences = new List<DAL.AppForm_Residences>();
details.Select(d => d.AppForm_Residences).ToList().ForEach(d => residences.AddRange(d));

Answers:


316

您要使用SelectMany扩展方法。

var residences = details.SelectMany(d => d.AppForm_Residences).ToList();

3
谢谢。@JaredPar从错误的元素中进行选择,但是感谢你们双方的指导。
加勒特·威德曼2009年


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();
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.