在我们其中一个客户的项目中,我经常需要<{1}}中所有项目的所有孩子。
这是模型的简化版本:
IEnumerable
当我现在想要public class Parent
{
public IEnumerable<Child> Children {get;set;}
}
public class Child
{
}
中所有Parent
个实例的所有子项时,我现在使用常规List{T}
,如下所示:
foreach
我想知道这是否可以在一个Linq声明中完成?
类似的东西:
List<Parent> parents = GetAllParents();
var children = new List<Child>();
foreach(var parent in parents)
{
children.AddRange(parent.Children);
}
答案 0 :(得分:11)
使用SelectMany
将父序列投影到子列表中,并将这些列表压缩为单个序列:
var children = parents.SelectMany(p => p.Children);
查询语法类似于
var children = from p in parents
from c in p.Children
select c;