转换为值类型'Int32'失败,因为实例化值为null

转换为值类型'Int32'失败,因为实例化值为null,第1张

转换为值类型'Int32'失败,因为实例化值为null

linq-to-sql查询不会作为代码执行,而是转换为SQL。有时,这是一种“泄漏抽象”,会产生意外的行为。

一种这样的情况是空值处理,在不同的地方可能会有意外的空值。

...DefaultIfEmpty(0).Sum(0)
可以在这种(非常简单)的情况下提供帮助,在这种情况下,可能没有任何元素,并且sql的
SUM
返回值是
null
c#期望为0。

一种更通用的方法是,只要有生成的SQL返回意外的null的风险,

??
就将其转换为
COALESCE

var creditsSum = (from u in context.User   join ch in context.CreditHistory on u.ID equals ch.UserID          where u.ID == userID   select (int?)ch.Amount).Sum() ?? 0;

这首先

int?
要告诉C#编译器
null
,即使
Sum()
返回一个,该表达式的确可以返回
int
。然后,我们使用普通
??
运算符处理该
null
案件。

基于此答案,我写了 一篇博客文章,其中详细介绍了LINQ to SQL和LINQ to Entities。



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5505811.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-13
下一篇2022-12-12

发表评论

登录后才能评论

评论列表(0条)

    保存