c# - 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 但不确定
解决方案
更新以反映 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();
有更简洁和更有表现力的方式来编写同样的查询,但这应该会给你你正在寻找的结果。
推荐阅读
- ios - 如何只使用 Airpod 的麦克风而不停止其他应用正在播放的任何音乐?
- php - Drupal 8 - MenuLinkContent 通过 loadByProperties 获取所有子项
- javascript - 将回调函数传递给 promise.then()
- redux-saga - 如何将 Redux Saga 转换为 Observable
- python - 为什么这个 python 代码在函数中执行得更快?
- amazon-web-services - Hive 时间戳错误为二进制
- c++ - 为什么我需要在 QVector 中有一个默认构造函数
? - java - 在Java中,我如何检查一个字符串是否由字母和数字组成,但只有字母和数字?
- java - 如何模拟 Stripe 网络调用以在 Java 中进行测试
- html - 我选择什么 enctype 将选项值保留为对象并保留支持类型 app/json?