[英]How to group by with left join by multiple columns using linq and get count of grouped records?
假设我们有: Employee class(道具:EmployeeID,EmployeeName,DepartmentID,Department - 作为导航道具)和Department class(道具: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、市场营销、1 | 3,人力资源,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();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.