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

Je pense que je reçois un IList de ILists, mais je n'excepte que les trois enfants. Comment je reçois ça?Linq Select IList

Répondre

6

Je ne suis pas trop à l'aise avec la syntaxe de requête, mais je pense que cela va aplatir la liste des enfants:

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

utilisant la syntaxe, il ressemble à la méthode d'extension ceci:

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

Vous récupérez en fait un IEnumerable < IEnumerable <MyChildClass> >. Pour obtenir un IEnumerable simple <MyChildClass> vous pouvez faire l'appel suivant

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