2013-11-22 2 views
1

В рамках проекта одного из наших клиентов мне часто нужно получить всех детей всех предметов в IEnumerable.Получение всех объектов из всех IEnumerables в пределах всех IEnumerables

Это упрощенная версия модели:

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

public class Child 
{ 
} 

Когда я теперь хочу все детей всех Parent экземпляров в List{T} Сейчас я использую регулярные 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; 
Смежные вопросы