Linq列表到单个列表

似乎是这样的事情已经被回答,但我无法find它。

我的问题是非常简单的,我怎么能在一个语句中这样做,而不是必须新的空列表,然后聚集在下一行,我可以有一个单一的linq语句输出我的最终名单。 细节是一个项目列表,每个项目都包含一个住宅列表,我只是希望所有的住宅都在一个平面列表中。

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

你想使用SelectMany扩展方法。

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

使用SelectMany

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

有一个示例代码给你:

  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 . . . 

对于那些需要查询expression式语法的用户:使用两个from语句

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