I have this query :
dbContext.OrganizationHierarchyItems
.Include(x => x.Parent)
.Include(x => x.SubOrganizationHierarchyItems)
.Where(x => x.Parent==null)
.ToList();
And I need to flat all OrganizationHierarchyItems for root elements(Parent=null).
How can I flat self-reference entities using Entity Framework?
Update:
For now I came up with this code :
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;
}
But the problem with the code above is I am loading all OrganizationHierarchyItems to flatten only one root element's hierarchy.