2009-03-10 2 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> 

나는 ILists의 IList를 다시 얻고 있다고 생각하지만, 나는 세 명의 자식 만 exepect한다. 어떻게해야합니까?Linq 선택 IList

답변

6

내가 쿼리 구문을 지나치게 확신 아니지만, 나는이 아이의리스트 평평 생각 :

var foo = parents.SelectMany(p => p.children); 
: 확장-방법은 다음과 같습니다 구문을 사용하여

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

4

실제로 IEnumerable을 다시 얻고 있습니다. < IEnumerable <MyChildClass> >. 간단한 IEnumerable을 얻으려면 <MyChildClass> 다음 전화를 할 수 있습니다.

var bar = foo.SelectMany(x => x);