首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用LINQ展平获得最深值的树

使用LINQ展平获得最深值的树
EN

Stack Overflow用户
提问于 2020-06-22 23:49:51
回答 1查看 42关注 0票数 0

如果我有一个部门和员工的层次结构,如下所示:

代码语言:javascript
复制
    public class TestEmployee
{
    public Guid ID { get; set; }
    public Guid TestDepartmemntID { get; set; }

    public string name { get; set; }
    public string email { get; set; }

}

public class TestDepartmemnt
{
    public Guid ID { get; set; }
    public Guid ParentTestDepartmentID { get; set; }
    public string TestDepartmentName { get; set; }
    public string? ManagerName { get; set; }
    public string phoneNumber { get; set; }
}

注意ManagerName是可以为空的.

有没有更好的方法来获取员工的直接经理姓名,而不是遍历祖先以找到最接近的部门经理姓名?

如果Widgets Inc有CEO Bob在根,Bob管理着几个部门,其中一个是物流部门。

物流有几个部门,一个是仓库。仓库里有个Sharon的经理。

仓库有多个部门,包括发货和接收。

里克在航运业工作。

里克的经纪人是莎伦。

我可以很容易地确定瑞克在哪个部门工作,因为我可以得到TestDepartmentID。

但是,在将Rick从树中取出时,我是否必须这样做: get Ricks TestDepartmentID的最接近的祖先,其中ManagerName不为null或空?

有没有比递归循环更优雅的方法呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-23 03:26:04

Linq在IEnumerables上运行,因此第一步是创建一个。例如通过使用迭代器块。然后,您可以使用.First()或任何其他linq方法来返回第一个非空管理器或任何其他您想要的查询。

代码语言:javascript
复制
    public Dictionary<Guid, TestDepartmemnt> departments = new Dictionary<Guid, TestDepartmemnt>();

    public IEnumerable<TestDepartmemnt> GetParents(Guid departmentId)
    {
        while(departments.TryGetValue(departmentId, out var department))
        {
            yield return department;
            departmentId = department.ParentTestDepartmentID;
        }
    } 

这假设您在字典中有部门。这可以替换为您用来将ids链接到部门的任何方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62518412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档