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;
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)