[英]Get Count of Lazy Loaded Child Collection Using LINQ and Entity Framework
[英]What is fastest way to get count with other fields using LINQ - Entity Framework
我為每個結果獲取員工數:
var query = (from Department dept in database.Department
join emp in database.Employees on dept.EmployeeId equals emp.EmployeeId
where dept.IOfficeId == officeId
select new EmployeeData
{
FullName = emp.Name,
EmployeeId = dept.EmployeeId,
DepartmentName = dept.Name,
EmployeeCount =
(from Employees emp_count in database.Employees
where emp_count.DepartmentId == dept.DepartmentId).Count()
});
請建議更快,更有效的方法來獲取數據。
由於每個部門的employee-count是一個相當簡單的查詢,如果你為每個員工執行它,這也是多余的,我首先會查詢每個部門的employee-count,然后在當前查詢中使用該結果。
var departmentEmployeeCount = database.Employees
.GroupBy(x => x.DepartmentId)
.Select(x => new { DepartmentId = x.Key, Count = x.Count() })
.ToArray();
var query = (from Department dept in database.Department
join emp in database.Employees on dept.EmployeeId equals emp.EmployeeId
where dept.IOfficeId == officeId
select new {
emp.Name,
dept.EmployeeId,
dept.Name,
dept.DepartmentId
}
)
.AsEnumerable()
.Select(x => new EmployeeData {
FullName = x.Name,
EmployeeId = x.EmployeeId,
DepartmentName = x.Name,
EmployeeCount = departmentEmployeeCount
.Where(z => z.DepartmentId == x.DepartmentId)
.Select(x => x.Count)
.FirstOrDefault()
}
);
我必須說,我發現令人困惑的是,您的Employees
表包含一個DepartmentId
列, 而 Department
包含一列EmployeeId
。 好像連接同一個表的兩個外鍵。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.