Jos*_*eph 1 c# linq sum decimal
我有以下代码在找不到数据时导致异常。
decimal expectedAmount = salePayments.Where(x => x.PaymentTypeId == i).Select(x => x.Amount).Sum(x => x);
Run Code Online (Sandbox Code Playgroud)
例外:
System.Data.Entity.dll 中出现类型为“System.InvalidOperationException”的异常,但未在用户代码中处理
附加信息:转换为值类型“十进制”失败,因为具体化值为空。结果类型的泛型参数或查询必须使用可空类型。
对 SO 的一些研究让我尝试:
decimal? test = salePayments.Where(x => x.PaymentTypeId==i).Select(x => x.Amount).Sum(x => x) ?? 0m;
Run Code Online (Sandbox Code Playgroud)
但这现在不会编译错误:
操作员 '??' 不能应用于“十进制”和“十进制”类型的操作数。
您需要显式转换x.Amount中Select向decimal?,然后你可以使用空合并运算符。
decimal test = salePayments.Where(x => x.PaymentTypeId==i)
.Select(x => (decimal?) x.Amount).Sum(x => x) ?? 0m;
Run Code Online (Sandbox Code Playgroud)
或者你可以decimal像这样返回:
decimal test = salePayments.Where(x => x.PaymentTypeId==i)
.Select(x => x.Amount ?? 0m).Sum(x => x);
Run Code Online (Sandbox Code Playgroud)
我不确定,但您可以尝试Sum直接申请,例如:
decimal? test = salePayments.Where(x => x.PaymentTypeId==i)
.Sum(x => x.Amount);
Run Code Online (Sandbox Code Playgroud)