Я не уверен на 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;
}