2013-11-22 82 views
1

在我们的客户之一的项目中,我经常需要获得全部所有项目的子项IEnumerable从所有IEnumerables中获取所有对象在所有IEnumerable中

这是模型的简化版本:

public class Parent 
{ 
    public IEnumerable<Child> Children {get;set;} 
} 

public class Child 
{ 
} 

当我现在想List{T}所有孩子们都Parent实例我现在使用常规foreach,就像这样:

List<Parent> parents = GetAllParents(); 
var children = new List<Child>(); 
foreach(var parent in parents) 
{ 
    children.AddRange(parent.Children); 
} 

我想知道这是否可以在一个Linq声明中完成?

喜欢的东西:

var children = parents.Select(.... 

回答

11

使用SelectMany项目家长序列到儿童的名单和扁平这些名单为单一序列:

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

查询语法类似于

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