我知道为什么会这样,但是有人能指出我正确的语法方向吗?
目前我有:
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结果(在空合并运算符之前).
如何排除空值,即
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)
| 归档时间: |
|
| 查看次数: |
20130 次 |
| 最近记录: |