gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 08:42:17 26 4
gpt4 key购买 nike

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 子句中的 equals 之后,实际上什么都没有!在LINQPad的SQL查询中我们看到了很好的where子句:

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

当我逐行比较从 VS 和 LINQPad 生成的两个 SQL 查询时,这是一回事。除了 LINQPad 在 Visual Studio 的 where 子句中使用参数和 equal 的缺失右侧部分,如前所示。


注1

在 LINQ 查询中,我尝试在 where 子句中使用以下语法:

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

但也会产生不好的结果。我什至在 LINQ 查询之前尝试过这样的事情:

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

注2

属性是可为空的整数。如果属性为 null,我确实希望在查询中为 null。显然,如果有值,我想要属性的值。

注3

我试过这个问题的命题:Linq where column == (null reference) not the same as column == null

...没有成功。


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

谢谢!

最佳答案

试试这个:

where object.Equals(t.IdRole, access.IdRole)

关于c# - 使用 LINQ-to-SQL 处理 where 子句中的空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2411894/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com