LINQ .SUM()和可空的db值

Chr*_*ris 11 c# linq

我知道为什么会这样,但是有人能指出我正确的语法方向吗?

目前我有:

var expense = from e in db.I_ITEM
              where e.ExpenseId == expenseId
              select e;

return expense.Sum(x => x.Mileage ?? 0);
Run Code Online (Sandbox Code Playgroud)

我的问题是x.Mileage的类型是"double?" 并且在db中具有空值.

我得到的错误是:

Exception Details: System.InvalidOperationException: The cast to value type 'Double' failed because the materialized value is null. Either the result type's generic parameter or the query must use a nullable type.
Run Code Online (Sandbox Code Playgroud)

什么是正确的语法?

Jon*_*eet 20

我很惊讶失败了,但是一个可能有用的替代方法就是对可空值进行求和然后使用null合并运算符:

return expense.Sum(x => x.Mileage) ?? 0d;
Run Code Online (Sandbox Code Playgroud)

当然,在LINQ to Objects中,如果序列中没有非空值,则会执行正确的操作,忽略空值并给出null结果(在空合并运算符之前).


sgm*_*ore 5

如何排除空值,即

var expense = 
          from e in db.I_ITEM
          where (e.ExpenseId == expenseId) && (e.Mileage.HasValue)
          select e;

 return expense.Sum(x => x.Mileage);
Run Code Online (Sandbox Code Playgroud)