遍历对象的层次结构-C#-linq

遍历对象的层次结构-C#-linq,c#,.net,linq,for-loop,data-structures,C#,.net,Linq,For Loop,Data Structures,我有一个层次结构如下的对象(比如A) obj A-->包含obj B的列表-->包含obj C的列表--> 包含obj D的列表 给定obj A,我需要得到所有obj D的总列表,不管它与obj C和obj B的关联如何。类似于list GetAllofD(A) 你能给我建议最好的方法吗?我不想对循环使用多个。使用linq的任何更好的方法?根据@feiyun的评论,可以使用的重复应用逐步汇总类层次结构的所有级别: var allDsInTheTree = new A().Bs.SelectMan

我有一个层次结构如下的对象(比如A)

obj A-->包含obj B的列表-->包含obj C的列表--> 包含obj D的列表

给定obj A,我需要得到所有obj D的总列表,不管它与obj C和obj B的关联如何。类似于
list GetAllofD(A)


你能给我建议最好的方法吗?我不想对循环使用多个
。使用linq的任何更好的方法?

根据@feiyun的评论,可以使用的重复应用逐步汇总类层次结构的所有级别:

var allDsInTheTree = new A().Bs.SelectMany(b => b.Cs.SelectMany(c => c.Ds));
public class D { public int Id { get; set; } }
public class C {
    public IEnumerable<D> Ds { get; set; }
}
public class B
{
    public IEnumerable<C> Cs { get; set; }
}
public class A
{
    public IEnumerable<B> Bs { get; set; }
}
给定类层次结构:

var allDsInTheTree = new A().Bs.SelectMany(b => b.Cs.SelectMany(c => c.Ds));
public class D { public int Id { get; set; } }
public class C {
    public IEnumerable<D> Ds { get; set; }
}
public class B
{
    public IEnumerable<C> Cs { get; set; }
}
public class A
{
    public IEnumerable<B> Bs { get; set; }
}

处理集合的空条件

a.b == null ? new List<D>() : a.b.SelectMany(b=>b.c==null ? new List<D>() : b.c.SelectMany(c=>c.d)) 
a.b==null?新建列表():a.b.SelectMany(b=>b.c==null?新建列表():b.c.SelectMany(c=>c.d))

a.b.SelectMany(b=>b.c.SelectMany(c=>c.d))a.b.c.Select(c=>c.d).ToList()@飞云0112:谢谢,很好用。在同一个linq查询中,是否有方法处理集合的null条件?