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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |