如何将含JOIN的SQL GROUP BY查询转换为LINQ查询
修正后的LINQ GROUP BY查询
你的目标是关联Person和Salary表,按Person.Unit分组统计各部门人数与工资总和,原LINQ代码存在语法与逻辑错误,以下是修正后的版本:
var summarySalary = ( from c in _context.Person join l in _context.Salary on c.Person_id equals l.Person_id // 分组时同时保留Person和Salary的关联数据,避免丢失Salary字段 group new { Person = c, Salary = l } by c.Unit into g select new { // 分组的Key对应原SQL的Person.Unit Units = g.Key, // 统计分组内的人数(关联后的有效记录数) QuanPer = g.Count(), // 对分组内的Salary.Val求和 TotVal = g.Sum(item => item.Salary.Val) }).ToList();
原代码错误说明:
- 分组语法错误:
group c by c.Unit into to g属于语法错误,且仅分组c会丢失Salary字段,无法完成工资求和,需改为同时包含关联数据的分组写法。 - 作用域错误:分组后原变量
c的作用域已结束,不能直接访问,需通过分组对象g的Key获取分组字段值。 - 统计逻辑错误:
c.Unit.Count()是对字符串长度计数,正确的人数统计应为g.Count(),统计分组内的元素数量。 - 求和逻辑错误:
g.Val.Sum()无对应属性,需通过分组元素中的Salary对象获取Val字段后求和。
内容的提问来源于stack exchange,提问作者ntuan9010
相关产品推荐
相关产品推荐

