您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

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

一种这样的情况是空值处理,在不同的地方可能会有意外的空值。...DefaultIfEmpty(0).Sum(0)可以在这种(非常简单)的情况下提供帮助,在这种情况下,可能没有任何元素,并且sqlSUM返回值是nullc#期望为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。

其他 2022/1/1 18:18:04 有475人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶