使用实体框架使用 NULL 计算两列之间的差异



>假设我有一个表,比如说student有两个可为空的十进制列,如下所示

A       B
-------|--------
85  |  NULL
NULL |  5
50  |  30

我想计算两列 A 和 B 之和之间的差值,即(135 - 35= 100

但是通过我当前的查询,我得到了(85 - NULL) + (NULL - 5) + (50 - 30) = 0 - 0 + 20 = 20

我会写一个像 SQL 查询

select SUM(ISNULL(A, 0) - ISNULL(B, 0)) from student --100

但我不确定使用 EF 如何实现这一点

我目前编写以下查询,该查询不会将 null 合并为零。

var result = context.student.Sum(m=> m.A - m.B); // 20

我可以使用两个单独的Sum,但我更喜欢用一个 sum 语句来写它

var result = context.student.Sum(m=> m.A) - context.student.Sum(m=> m.B) 

如何使用单个Sum实现此目的

您正在寻找空合并运算符??。 如果它左侧的部分为空,则返回右侧部分:

int exemple = null ?? -1;

在这里,0 作为 null 的默认值:

var result = context.student.Sum(m=> (m.A??0) - (m.B??0));

最新更新