【发布时间】:2020-06-22 15:49:51
【问题描述】:
如果我有一个部门和员工的层次结构,像这样:
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。
仓库有多个部门,包括发货和收货。
Rick 从事航运业。
Rick 的经理是 Sharon。
我可以轻松确定 Rick 在哪个部门工作,因为我可以获得 TestDepartmentID。
但是,当我把瑞克从树上救下来时,我是否必须做一些类似的事情: 获取 Ricks TestDepartmentID 最接近的祖先,其中 ManagerName 不为空或为空?
有没有比递归循环更优雅的方法来做到这一点?
【问题讨论】:
-
Linq 不适用于分层(递归方法)。最好的方法是您正在使用和迭代的方法。如果您经常这样做,那么创建所有祖先的字典会更快。
-
递归循环过什么?
List<T>?DataTable?Dictionary<TKey, TValue>?您如何创建对象和集合?另外,您是否可以选择重构这些类? .... -
您正在使用主键和外键。这是要在 IQueryable 中使用吗?
-
我现在正在迭代。让所有员工,然后是他们的部门,然后迭代。提供的答案似乎是一种合理的方法,我必须对其进行测试。