У меня есть таблица Employee, в которой также есть информация о руководителе отдела. Мне нужно заполнить два раскрывающихся списка - один с сотрудниками, а другой с менеджерами. Вместо того, чтобы использовать два запроса для извлечения сотрудников и другой запрос для извлечения менеджеров, я запрашиваю таблицу один раз и сохраняю всю информацию в кеше в IEnumerable EmployeeList.
Мне нужен какой-то запрос, чтобы вытащить менеджеров из этого запроса - либо используя LINQ, либо цикл внутри кода C #. Я написал цикл, но он очень неэффективен.
Вот SQL-запрос для заполнения HCache:
SELECT [Dept_Mgr_ID] As MgrId,
EmployeeId,
EmpLastName,
EmpFirstName
FROM Employee_tbl
Здесь я пытаюсь перебрать кеш и соединить EmployeeId и MgrId
List<DTO.Employee> Mgrs = new List<DTO.Employee>(0);
for (int i = 0; i < HCache.EmployeeList.Count(); i++)
{
foreach(var e in HCache.EmployeeList)
{
if (HCache.EmployeeList.ElementAt(i).EmployeeId == e.MgrId)
{
Mgrs.Add(new DTO.Employee() { MgrID = e.MgrId,
ManagerLastName = e.EmpLastName,
ManagerFirstName = e.EmpFirstName
});
}
}
}
Я не использую этот запрос, однако я могу получить результаты, используя второй запрос для получения менеджеров:
WITH CTE_Manager_ID
AS
(
SELECT DISTINCT [Dept_Mgr_ID]
FROM Employee_tbl
)
SELECT EmployeeId,
EmpLastName,
EmpFirstName
FROM Employee_tbl Emp
INNER JOIN CTE_Manager_ID cteMgr
ON cteMgr.Dept_Mgr_ID = Emp.EmployeeId