我有List<Person>
(人)每个人都有List<Kid>
(孩子)
如果我想找到所有孩子,在LINQ这就是我要做的事情
var kids=new List<Kids>();
foreach(var p in people)
{
foreach(var kid in p.Kids)
{
kids.Add(kid);
}
}
使用LINQ有一种单行方式吗?
答案 0 :(得分:13)
就像SelectMany一样简单:
将序列的每个元素投影到IEnumerable并展平 得到的序列成一个序列。
var kids = people.SelectMany(p => p.Kids);
(如果您想要List<Kid>
而不是IEnumerable<Kid>
,只需在结果上调用.ToList()
。)
答案 1 :(得分:4)
您可以使用SelectMany扩展方法
var kids = new List(people.SelectMany(person => person.Kids));
答案 2 :(得分:3)
SelectMany
的“LINQ-non-lambda-style”版本:
var allKids =
from p in people
from k in p.Kids // secondary "from" makes SelectMany (aka flat map)
select k;
// Result from above is IEnumerable, to Force evaluation as a List:
List<Kid> allKidsList = allKids.ToList();