簡體   English   中英

使用LINQ - 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM