如何查询自引用表

时间:2011-01-07 11:18:47

标签: linq linq-to-entities

我有一张员工表。 每位员工都有一位经理,每位经理都有一位经理等等。 所以对于一个经理我想做一个查询,以便我有我所有的团队成员,我有他们所有的团队成员等等。 在EF Linq语句中执行此操作的最佳方法是什么。 理想情况下,我想要一份员工清单,并了解每个员工所在的团队。

1 个答案:

答案 0 :(得分:2)

我不是百分百肯定你是如何在EF中解决这个问题的,我认为最终可能会遇到很多疑问(如果你不幸的话,每个经理都有一个)。正如我所做的那样,从您的顶级员工开始,让所有拥有该经理的员工担任经理。然后我会递归地拿走你刚刚获得的一组员工中的所有经理并提取他们的ID。当您拥有所有ID时,您可以向具有任何ID的员工查询数据库作为其经理。

你明白了吗?这将导致每个级别的查询,而不是每个管理器一个查询。但也许EF解决了这个问题,我不确定。但我认为你需要递归地做。

我的目标是:

public IList<Employees> GetEmployeesForManager(int managerId)
{
    return GetEmployeesForManagers(new List<int>() { managerId });
}

public IList<Employees> GetEmployeesForManagers(IList<int> managerIds)
{
    var listOfEmployees = // Get the employees
    var listOfManagers = listOfEmployees.Where(y => y.IsManager).Select(y => y.Id).ToList();
    if(listOfManagers.Count >= 0)
        listOfEmployees.AddRange(GetEmployeesForManagers(listOfManagers));
    return listOfEmployees;
}