现在我在NHibernate中有这样的东西:
Expression.Like(property, value, MatchMode.Anywhere)
并生成SQL,如:
property LIKE '%value%'
对于那种情况很好。在另一种情况下,我想要SQL:
IFNULL(property LIKE '%value%', 0)
但我在手册中没有看到任何涉及IFNULL的例子,我甚至找不到任何普通的API文档。
我找到了Expression.Sql(),但只是手册中的一个例子,它让我有点害怕使用我没有看到任何真实文档的东西,并且在我自己做SQL的时候我正在使用NHibernate试图摆脱它。
在NHibernate中有一种比Expression.Sql()更好的方法吗?
答案 0 :(得分:2)
我假设这是在WHERE子句中,此时IFNULL(property LIKE '%value%', 0)
不是有效的SQL,因为LIKE的计算结果为true或false,0都不是。
我怀疑你确实想要property LIKE '%value%' OR property IS NULL
?
如果是这种情况:
.Add(
Expression.Disjunction()
.Add(Expression.Like(property, value, MatchMode.Anywhere))
.Add(Expression.IsNull(property))
)
答案 1 :(得分:0)
这本身不是答案,但我建议您寻找COALESCE()
。 Here你可以看到原因。