2011-01-07 2 views
1

У меня есть таблица сотрудников. У каждого сотрудника есть менеджер, и у каждого менеджера есть менеджер и так далее. Итак, для менеджера я хочу сделать запрос, чтобы у меня были все члены моей команды, и у меня есть все члены их команды и так далее. Каков наилучший способ сделать это в инструкции EF Linq. В идеале я хочу список сотрудников и знаю, в какой команде они находятся.Как запросить таблицу саморегуляции

ответ

2

Я не уверен на 100%, как вы решаете это в EF, и я думаю, что это может закончиться множеством запросов (по одному для каждого менеджера если вам не повезло). Как я бы это сделал, это начать с вашего верхнего сотрудника и получить всех сотрудников, у которых есть менеджер в качестве менеджера. Затем я рекурсивно возьму всех менеджеров из набора сотрудников, которые вы только что получили, и извлеките свои идентификаторы. Когда у вас есть все идентификаторы, вы можете запросить db для сотрудников, у которых есть какой-либо из идентификаторов в качестве своего менеджера.

Вы меня поняли? Это приведет к запросу на уровень вместо одного запроса на одного менеджера. Но, возможно, 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; 
} 
+0

Я смотрел вокруг с Google, и вы можете быть правы. – arame3333

+0

И тогда я обязательно поеду за своим решением :). Я думаю, вы можете сделать это с некоторыми действительно сложными лямбдами, но в чем смысл, когда вы можете сохранить его простым? Это решение гарантирует, что вы хотите иметь больше запросов, чем у вас есть уровни в вашей организации. –

+0

Код нуждается в убирании. При добавлении в коллекцию вы должны использовать метод AddRange – arame3333

Смежные вопросы