加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 使用LINQ-to-SQL处理where子句中的空值

发布时间:2020-12-15 17:45:36 所属栏目:百科 来源:网络整理
导读:Visual Studio中的LINQ-to-SQL查询生成具有错误的SQL查询.在LINQPad中,使用相同数据库(或DataContext)的相同LINQ查询运行正常. LINQ查询 var accesDomaines = from t in db.Access where t.IdUser == access.IdUtilisateur where t.IdDomain != null where t
Visual Studio中的LINQ-to-SQL查询生成具有错误的SQL查询.在LINQPad中,使用相同数据库(或DataContext)的相同LINQ查询运行正常.

LINQ查询

var accesDomaines = from t in db.Access
                  where t.IdUser == access.IdUtilisateur
                  where t.IdDomain != null
                  where t.IdRole == access.IdRole
                  where t.IdPlace == access.IdPlace
                  select t;

这是发生错误的生成SQL的一小部分:

WHERE (...) AND ([t3].[IdRole] = ) AND (...)

等于在where子句之后,字面上没有!在LINQPad的SQL查询中,我们看到good where子句:

WHERE (...) AND ([t3].[IdRole] IS NULL) AND (...)

当我比较来自VS和LINQPad的两个生成的SQL查询,一行一行,这是一回事.除了LINQPad之外,还使用了params,还有Visual Studio的where子句中的缺少的right部分.

注1

在LINQ查询中,我尝试使用where语句中的这种语法:

where t.IdRole.Equals(acces.IdRole.Value)

但也会产生不良的结果.在LINQ查询之前,我甚至尝试过这样的东西:

if (!acces.IdRole.HasValue) { acces.IdRole = null; }

笔记2

属性为可空整数.如果属性为空,则我在查询中要求为空.显然,如果有一个值,我想要属性的值.

注3

我已经尝试了这个问题提出的建议:Linq where column == (null reference) not the same as column == null

…没有成功.

任何解释两个类似的LINQ查询,但生成一个好的和一个坏的SQL查询?有什么建议来解决这个问题吗?

谢谢!

解决方法

尝试这个:
where object.Equals(t.IdRole,access.IdRole)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读