我的SQL数据库中有一个自引用的层次结构表,我使用EntityFramework数据库优先导入。这是我从中得到的课程:
public partial class Dimension
{
public System.Guid Id { get; set; }
public string Name { get; set; }
public Nullable<System.Guid> ParentDimensionId { get; set; }
public virtual ICollection<Dimension> ChildDimensions { get; set; }
public virtual Dimension ParentDimensions { get; set; }
}
课程和参考资料完成工作。但是现在我想编写一个LINQ查询,它允许我获得所有根维度(例如,其中ParentDimensionId == null),其中有任何子项符合某个条件。
我的问题是,在这个层次结构中可能有 n个级别,我必须为每个孩子,孙子等检查这个条件。
所以我真的需要一些像这样的扩展方法:
List<Dimension> dimensions = db.Dimension.Where(x =>
x.ParentDimension == null && // This is the "root" identifier
x.ChildDimensions.AnyChildWhere( c => c.Name == "foo") // This is the condition
).ToList()
这&#34; AnyChildWhere&#34;方法当然需要能够通过整个n级层次结构树,直到没有孩子离开。
有什么想法吗?