如何使用linq通过多列的左联接进行分组,并获取分组记录的计数



假设我们有:Employee类(道具:EmployeeID、EmployeeName、DepartmentID、Department-作为导航道具(和Department类别(道具:DepartmentID,DepartmentName,Employees-作为导航支柱(。这两张表之间的关系是一对多的。现在具体的例子是:

员工表格

EmployeeID EmployeeName DepartmentID     
1          Peter        1               
2          Anna         1                
3          John         2   

部门表格

DepartmentID  DepartmentName                                                        
1             IT                                                                    
2             Marketing                                                              
3             HR         

最终结果应该显示每个部门(DepartmentID、DepartmentName、NumOfEmployees(,无论该部门是否有员工以及该部门的员工数量,例如:1、it、2|2、Marketing、1|3、HR、0。

我的语法是:

var dbContext.Departments.Include(d => d.Employees).    
GroupBy(d => new { d.DepartmentID, d.DepartmentName }).
Select(x => new {
DepartmentID = x.Key.DepartmentID,
DepartmentName = x.Key.DepartmentName,
NumOfEmployees = x.Count()
}).ToList();

问题是,属性NumOfEmployees为每个部门分配了1,但不知道为什么。如何更正lambda表达式LINQ语法?

我想说,这里不需要GroupBy,可以做如下简单的事情:

var result = dbContext.Departments
.Select(x => new 
{
DepartmentID = x.DepartmentID,
DepartmentName = x.DepartmentName,
NumOfEmployees = x.Employees.Count()
})
.ToList();

最新更新