0

我有这个查询:

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 以仅展平一个根元素的层次结构。

4

0 回答 0