Скажем, у меня есть таблица 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.
В настоящее время я пишу запрос ниже, который не объединяет ноль в ноль.
var result = context.student.Sum(m=> m.A - m.B); // 20
Я мог бы использовать два отдельных Sum, но я предпочитаю записывать их в одном выражении суммы.
var result = context.student.Sum(m=> m.A) - context.student.Sum(m=> m.B)
Как мне добиться этого с помощью одного Sum
@Luc: Можно заключить это в круглые скобки, я подозреваю, что вы получите 0 - m.B, когда значение m.A равно нулю.
@ Позже ты прав. Вот почему я думаю, что ?? здесь не может быть решением.





Вы ищете оператор нулевого угля ??.
Если левая часть равна нулю, она вернет правую часть:
int exemple = null ?? -1;
Здесь 0 как значение по умолчанию для null:
var result = context.student.Sum(m=> (m.A??0) - (m.B??0));
var result = context.student.Sum (m => m.A ?? 0 - m.B ?? 0);