У меня есть узлы дерева, хранящиеся в базе данных, подобные этому
Затем я строю эту плоскую структуру в иерархическую структуру, используя этот рекурсивный код
public IList<GuidingNode> BuildGuidingTree(int professionId, int parentId)
{
var guidingTrees = _context.GuidingNode.Where(p => p.ProfessionId == professionId).ToList();
return FlatToHierarchy(guidingTrees, parentId);
}
private IList<GuidingNode> FlatToHierarchy(IEnumerable<GuidingNode> list, int parentId)
{
return list.Where(i => i.ParentId == parentId)
.Select((v, i) => new IVTSGuidingNode {
Id = v.Id,
ParentId = v.ParentId,
Title = v.Title,
Children = FlatToHierarchy(list, v.Id)
}).ToList();
}
Следовательно, становится так
- Medical Field
- General Treatment
- Having a headache
- Patient Information
- Symptoms
- Giving out medicine
- Having a cold
- Specific Treatment
- Something
Дело в том, что если бы я хотел получить конкретный путь по конкретному узлу.
Например,Если бы я передал
NODE ID 3 «Наличие головной боли» в качестве параметра функции (у меня ее пока нет.)
Я бы получил только еенад узлами и под узлами. В результате это выглядело бы так:
- Medical Field
- General Treatment
**- Having a headache**
- Patient Information
- Symptoms
- Giving out medicine
Несвязанные узлы были бы удалены из дерева.
Я не совсем уверен, как справиться с этой ситуацией. Любые идеи будут оценены.
Спасибо.