LINQ 查询下表

问题描述 投票:0回答:1

表格数据:

Id_Org_hierarchy 层次结构_名称 Parent_Id_Org_hierarchy
1 OGt 0
2 NHT 1
3 第 1 批 2
3 语音 1

我需要如下结果:

第一批(NHT,OGT)

详情: Id_Org_hierarchy 列值存在于 Parent_Id_Org_hierarchy 等中

它是一个树结构格式数据。 任何人都可以帮助我,我不知道如何实现结果。

期待这个结果Batch1(NHT,OGT)

c# mysql entity-framework linq
1个回答
0
投票

有一个表示表行的类结构,解决方案将涉及递归方法来遍历树并构建结果。

这是一个基本解决方案:

定义您的班级:

public class OrgHierarchy
{
    public int Id_Org_hierarchy { get; set; }
    public string Hierarchy_Name { get; set; }
    public int Parent_Id_Org_hierarchy { get; set; }
}

使用 LINQ 和递归:

public string GetHierarchyPath(List<OrgHierarchy> data, int id)
{
    var item = data.FirstOrDefault(x => x.Id_Org_hierarchy == id);
    if (item == null) return string.Empty;
    if (item.Parent_Id_Org_hierarchy == 0) return item.Hierarchy_Name;

    return item.Hierarchy_Name + "," + GetHierarchyPath(data, item.Parent_Id_Org_hierarchy);
}

public void RunExample()
{
    List<OrgHierarchy> list = new List<OrgHierarchy>
    {
        new OrgHierarchy { Id_Org_hierarchy = 1, Hierarchy_Name = "OGt", Parent_Id_Org_hierarchy = 0 },
        new OrgHierarchy { Id_Org_hierarchy = 2, Hierarchy_Name = "NHT", Parent_Id_Org_hierarchy = 1 },
        new OrgHierarchy { Id_Org_hierarchy = 3, Hierarchy_Name = "BATCH 1", Parent_Id_Org_hierarchy = 2 },
        new OrgHierarchy { Id_Org_hierarchy = 4, Hierarchy_Name = "Voice", Parent_Id_Org_hierarchy = 1 }
    };

    var item = list.FirstOrDefault(x => x.Id_Org_hierarchy == 3); // assuming we're starting from id 3
    if (item != null)
    {
        var path = GetHierarchyPath(list, item.Parent_Id_Org_hierarchy);
        var result = $"{item.Hierarchy_Name}({path.TrimEnd(',')})";
        Console.WriteLine(result); // Outputs: BATCH 1(NHT,OGt)
    }
}

运行 RunExample() 方法查看结果。

© www.soinside.com 2019 - 2024. All rights reserved.