【发布时间】:2019-06-09 00:00:31
【问题描述】:
我有一个员工表,其中还包含部门经理信息。我需要填充两个下拉列表 - 一个包含员工,另一个包含经理。我不是使用两个查询来拉员工,另一个查询来拉经理,而是查询表一次并将所有信息存储在缓存中的 IEnumerable EmployeeList 中。
我需要一些查询来从该查询中提取管理器 - 使用 LINQ 或在 C# 代码中循环。我写了循环,但是效率很低。
这是填充 HCache 的 SQL 查询:
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
【问题讨论】:
-
如果DTO.Employee类有一个属性
DTO.Employee Manager不是更好吗?然后,您可以在链向上链接后向上导航。同样,该类将具有List<DTO.Employee> DirectReports -
我正在尝试为下拉列表拉出两个单独的列表 - 包含员工信息和经理信息。我可以轻松地从缓存中提取员工信息。这里的问题是 manager 的循环是永远的。请建议是否有更好的方法来优化代码。
标签: c# linq for-loop inner-join ienumerable