我有一个对象(比如A),其层次结构如下,
obj A - >包含obj B的列表 - >包含obj C列表 - > 包含obj D列表
鉴于obj A,我需要得到所有obj D的列表,无论它与obj C和obj B的关联如何List<D> GetAllofD(A a)
您能否建议我完成任务的最佳方式 - 不要使用多个for loops
。有没有更好的方法使用linq?
答案 0 :(得分:1)
根据@ feiyun的评论,重复应用SelectMany
可以逐步汇总类层次结构的所有级别:
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; }
}
单个级别的 SelectMany
类似于:
var cs = new List<C>();
foreach (var b in a.Bs)
{
cs.AddRange(b.Cs);
}
答案 1 :(得分:1)
处理集合的空条件
a.b == null ? new List<D>() : a.b.SelectMany(b=>b.c==null ? new List<D>() : b.c.SelectMany(c=>c.d))