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

前端之家收集整理的这篇文章主要介绍了c# – 使用LINQ-to-SQL处理where子句中的空值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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)

猜你在找的C#相关文章