سؤال

    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>

وأنا أعتقد أن الحصول على IList من ILists الوراء، لكني exepect فقط ثلاثة أطفال. كيف يمكنني الحصول على ذلك؟

هل كانت مفيدة؟

المحلول

ولست على ثقة أكثر من اللازم مع بناء الجملة الاستعلام، ولكن أعتقد أن هذا سوف تتسطح خارج قائمة الأطفال:

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

وعن طريق بناء الجملة تمديد طريقة يبدو مثل هذا:

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

نصائح أخرى

وأنت في الواقع الحصول على العودة إلى IEnumerable >. من أجل الحصول على IEnumerable بسيط يمكنك إجراء المكالمة التالية

var bar = foo.SelectMany(x => x);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top