空列表中的十进制总和导致异常

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)

但这现在不会编译错误:

操作员 '??' 不能应用于“十进制”和“十进制”类型的操作数。

Hab*_*bib 6

您需要显式转换x.AmountSelectdecimal?,然后你可以使用空合并运算符。

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)

根据文档,如果列表为空这将返回 0。