强制相等运算符与 NHibernate 中的 null 进行比较
本文关键字:null 中的 比较 NHibernate 运算符 | 更新日期: 2023-09-27 18:31:29
NHibernate在将字段与null进行比较时很聪明。请考虑以下 LINQ 语句:
string s = null;
var rows = session.Query<Entity>
.Where(e => e.SomeField == s)
.ToList();
语句转换为 SQL 查询
SELECT ...
FROM entity_table
WHERE some_field IS NULL;
在某些情况下,我不希望这种行为。我希望生成的查询包含some_field = NULL
限制(这永远不会为真)。
(如何)我可以指示NHibernate这样做吗?还是我必须编写两个查询并在代码中显式处理空大小写?
请注意,这是在 NHibernate 的上下文中,而不是在 linq-to-sql 中。NHibernate无法将object.Equals(e.SomeField, s)
转换为SQL查询。此外,与当前null
的变量进行比较并直接与 null
关键字进行比较将产生与 NHibernate 相同的查询。
您可以使用
QueryOver
,但会生成参数化查询:
string s = null;
var rows = session.QueryOver<Entity>()
.Where(Expression.Eq(Projections.Property<Entity>(x => x.SomeField), s))
.List();