首页 > 解决方案 > Linq - 带有连接的选择语句内的值总和

问题描述

我有一个 select 语句,它加入了 3 个表,它返回了个人员工的薪水之类的东西,我想要所有员工的薪水总和。

我的陈述如下所示。

此语句返回单个员工的薪水数组,我如何获得总和?

var x = (from e in EmpDB.Employees
      join d in EmpDB.Departments on e.DepId equals d.Id
      join s in EmpDB.EmpSalaries on new { d.Zone, d.Vendor, d.Status } equals new { s.Zone, s.Vendor, s.Status}
      where e.Status = "Active" && e.BAID != NULL && e.DepId == 3
      select new { s.Salary.Value });

尝试使用 SUM 但不确定

标签: c#entity-frameworklinq

解决方案


更新以反映 Mindswipe 的建议以更清晰。

该语句select new { s.Salary.Value }创建一个包含薪水值的可枚举对象集合。为了简化这一点,我们可以改为使用以下内容来创建可枚举的数值集合:

select s.Salary

由于您使用的是.Value,我假设 Salary 是一个可为空的类型,这意味着我们可能会在薪水集中获得一个空值,因此为避免这种情况,我们将使用空合并运算符??为空值返回 0:

select s.Salary ?? 0

一旦您收集了各个工资值,您就可以使用 LINQ Sum 函数:

var x = (from e in EmpDB.Employees
      join d in EmpDB.Departments on e.DepId equals d.Id
      join s in EmpDB.EmpSalaries on new { d.Zone, d.Vendor, d.Status } equals new { s.Zone, s.Vendor, s.Status}
      where e.Status = "Active" && e.BAID != NULL && e.DepId == 3
      select s.Salary ?? 0)
      .Sum();

有更简洁和更有表现力的方式来编写同样的查询,但这应该会给你你正在寻找的结果。


推荐阅读