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查询中,我们看到了好的where子句:
WHERE (...) AND ([t3].[IdRole] IS NULL) AND (...)
当我逐行比较来自VS和LINQPad的两个生成的SQL查询时,这是同样的事情。除了LINQPad使用params以及Visual Studio的where子句中缺少的右侧部分,如前所示。
注1
在LINQ查询中,我在where子句中尝试了这种语法:
where t.IdRole.Equals(acces.IdRole.Value)
但也会产生不好的结果。我甚至在LINQ查询之前尝试过类似的东西:
if (!acces.IdRole.HasValue) { acces.IdRole = null; }
笔记2
属性是可以为空的整数。如果property为null,我确实想在查询中使用null。显然,如果有价值,我想要财产的价值。
注3
我试过这个问题提出的主张: Linq where column ==(null reference)与column == null不同
......没有成功
有两个类似的LINQ查询的解释,但生成一个好的和一个坏的SQL查询?有什么建议可以解决这个问题吗?
谢谢!