Как запросить самоссылочную таблицу - PullRequest
1 голос
/ 07 января 2011

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

1 Ответ

2 голосов
/ 07 января 2011

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

Ты понял мою точку зрения? Это приведет к запросу на уровень вместо одного запроса на менеджера. Но, возможно, 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...