C# 从特定节点构建树
我在数据库中存储了这样的树节点C# 从特定节点构建树,c#,entity-framework,linq,data-structures,treeview,C#,Entity Framework,Linq,Data Structures,Treeview,我在数据库中存储了这样的树节点 - Medical Field - General Treatment - Having a headache - Patient Information - Symptoms - Giving out medicine - Having a cold - Specific Treatment - Something - Med
- Medical Field
- General Treatment
- Having a headache
- Patient Information
- Symptoms
- Giving out medicine
- Having a cold
- Specific Treatment
- Something
- Medical Field
- General Treatment
**- Having a headache**
- Patient Information
- Symptoms
- Giving out medicine
然后,我使用递归代码将这个平面结构构建为层次结构
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();
}
问题是如果我想通过一个特定的节点获得特定的路径
例如,如果我通过了
节点ID 3“头痛”作为函数的参数(我还没有)
我只会得到它上面的节点和下面的节点。因此,它看起来是这样的
- Medical Field
- General Treatment
- Having a headache
- Patient Information
- Symptoms
- Giving out medicine
- Having a cold
- Specific Treatment
- Something
- Medical Field
- General Treatment
**- Having a headache**
- Patient Information
- Symptoms
- Giving out medicine
不相关的节点将从树中剪除
我不太清楚如何处理这种情况。任何想法都将不胜感激
谢谢。您所说的“我选择了”->在LINQ意义上选择,还是在“我用鼠标点击树状视图中的节点”意义上选择?或者别的什么?啊,我的意思是“如果我把它作为参数传递给函数”。我将更新这个问题。您现有的代码将递归地遍历树,并在传入节点下生成所有内容。。因此,您可能只需要一个追加操作,然后从列表中的每个父级(由LINQ生成)向上遍历树;生成的列表将是一个临时步骤,对于该列表中的eacg节点,向上走到根节点,创建新节点(除非在按id索引的字典中找到该节点-在这种情况下,将现有树添加到已创建节点的子节点),直到到达根节点是,这正是我在想的,但我仍然不确定我将如何使用这种方法。