【发布时间】:2020-08-04 20:59:53
【问题描述】:
假设我们有: 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、市场营销、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 语法是什么样的?
【问题讨论】:
-
您正在对部门进行分组,然后对它们进行计数,因此您会得到
1's。Include实际上被忽略了,因为您有Select声明。还有,为什么要按ID和Name分组? -
你不想要
NumOfEmployees = x.Employees.Count()吗? -
@CamiloTerevinto 我假设因为它不会编译,因为
IGrouping没有Employees属性。 -
@CamiloTerevinto 你的建议不起作用,因为 x 没有员工作为建议。
-
那是因为
x(更好地命名为dg)是一个有一个成员(部门记录)的IGrouping,所以如果你做了x.First().Employees.Count(),你会得到一个答案。想象一下,您取出Include和Select,然后您有dbContext.Departments.GroupBy(d => new { d.DepartmentID, d.DepartmentName })- 您希望在每个组中出现什么?
标签: c# linq entity-framework-6