2009-03-10 3 views
2
List<MyParentClass> parents = new List<MyParentClass>(); 
    var parent1 = new MyParentClass("parent1"); 
    var parent2 = new MyParentClass("parent2"); 
    parents.Add(parent1); 
    parents.Add(parent2); 
    var child1 = new MyChildClass("child1"); 
    parent1.children.Add(child1); 
    var child2 = new MyChildClass("child2"); 
    var child3 = new MyChildClass("child3"); 
    parent2.children.Add(child2); 
    parent2.children.Add(child3); 
    var foo = from p in parents 
       select from c in p.children 
        select c; 
    Assert.IsNotNull(foo); 
    Assert.AreEqual(3, foo.Count()); 

NUnit.Framework.AssertionException: 
    expected: <3> 
    but was: <2> 

Я думаю, что я возвращаюсь к Илисту из Илистов, но я излагаю только трех детей. Как мне это получить?Linq Выбрать IList

ответ

6

Я не слишком уверен, с помощью синтаксиса запроса, но я думаю, что это будет выравниваться список детей:

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

Использование расширенного синтаксиса метода выглядит следующим образом:

var foo = parents.SelectMany(p => p.children); 
4

Вы на самом деле возвращаете IEnumerable < IEnumerable <MyChildClass> >. Чтобы получить простой IEnumerable <MyChildClass>, вы можете позвонить по телефону

var bar = foo.SelectMany(x => x); 
Смежные вопросы