Linq列表列表到单个列表

时间:2009-07-17 20:34:55

标签: c# linq

似乎这种情况已经得到了回答,但我无法找到它。

我的问题非常简单,如何在一个语句中执行此操作,以便不必新建空列表然后在下一行聚合,我可以使用单个linq语句输出我的最终列表。详细信息是每个包含住宅列表的项目列表,我只想将所有住宅放在一个单一的列表中。

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

4 个答案:

答案 0 :(得分:268)

您想使用SelectMany扩展方法。

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

答案 1 :(得分:43)

使用SelectMany

var all = residences.SelectMany(x => x.AppForm_Residences);

答案 2 :(得分:30)

有一个示例代码:

    List<List<int>> l = new List<List<int>>();

    List<int> a = new List<int>();
    a.Add(1);
    a.Add(2);
    a.Add(3);
    a.Add(4);
    a.Add(5);
    a.Add(6);
    List<int> b = new List<int>();
    b.Add(11);
    b.Add(12);
    b.Add(13);
    b.Add(14);
    b.Add(15);
    b.Add(16);

    l.Add(a);
    l.Add(b);

    var r = l.SelectMany(d => d).ToList();
    foreach(int i in r)
    {
        Console.WriteLine(i);
    }

输出将是:

1
2
3
4
5
6
11
12
13
14
15
16
Press any key to continue . . .

答案 3 :(得分:27)

对于那些需要查询表达式语法的人:使用两个来自语句

var residences = (from d in details from a in d.AppForm_Residences select a).ToList();