繁体   English   中英

如何使用 linq 按多列左连接进行分组并获取分组记录数?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM