从所有IEnumerables中获取所有IEnumerables中的所有对象

时间:2013-11-22 16:34:14

标签: c# linq

在我们其中一个客户的项目中,我经常需要<{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);
}

1 个答案:

答案 0 :(得分:11)

使用SelectMany将父序列投影到子列表中,并将这些列表压缩为单个序列:

var children = parents.SelectMany(p => p.Children);

查询语法类似于

var children = from p in parents
               from c in p.Children
               select c;