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索引的字典中找到该节点-在这种情况下,将现有树添加到已创建节点的子节点),直到到达根节点是,这正是我在想的,但我仍然不确定我将如何使用这种方法。