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 を取得していると思いますが、3 つの子だけを期待しています。どうすればそれを取得できますか?

4

2 に答える 2

6

私はクエリ構文にあまり自信がありませんが、これにより子のリストが平坦化されると思います。

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

拡張メソッドの構文を使用すると、次のようになります。

var foo = parents.SelectMany(p => p.children);
于 2009-03-10T22:25:33.480 に答える
4

実際に IEnumerable<IEnumerable<MyChildClass>> を取得しています。単純な IEnumerable<MyChildClass> を取得するには、次の呼び出しを行うことができます

var bar = foo.SelectMany(x => x);
于 2009-03-10T22:26:40.387 に答える