我有这个查询:
dbContext.OrganizationHierarchyItems
.Include(x => x.Parent)
.Include(x => x.SubOrganizationHierarchyItems)
.Where(x => x.Parent==null)
.ToList();
而且我需要为根元素(Parent = null)扁平化所有OrganizationHierarchyItems 。
如何使用 Entity Framework 扁平化自引用实体?
更新:
现在我想出了这个代码:
var organizationHierarchyItems=dbContext.OrganizationHierarchyItems.ToList();
var flattenHierarchyList = FlattenOrganizationGraph(organizationHierarchyItems.FirstOrDefault(x => x.Id==id), organizationHierarchyItems);
private IList<OrganizationHierarchyItem> FlattenOrganizationGraph(OrganizationHierarchyItem passedItem, List<OrganizationHierarchyItem> organizationHierarchyItems, IList<OrganizationHierarchyItem> result=null)
{
if (result == null)
result = new List<OrganizationHierarchyItem>();
result.Add(passedItem);
foreach (var item in organizationHierarchyItems.Where(x => x.ParentId==passedItem.Id).ToList())
{
return FlattenOrganizationGraph(item, organizationHierarchyItems, result);
}
return result;
}
但是上面代码的问题是我正在加载所有 OrganizationHierarchyItems 以仅展平一个根元素的层次结构。