我想使用 SQL Server 2008 中的 Convert 函数,以便可以搜索 DateTime 列。
建议的 SQL 看起来像这样:
SELECT (list of fields) FROM aTable
WHERE CONVERT(VARCHAR(25), theColumn) LIKE '%2009%'
以下是尝试模拟转换调用的部分标准:
Projections.SqlFunction("CONVERT",
NHibernateUtil.String,
Projections.Constant("varchar(25)"),
Projections.Property(searchCol))
搜索列将被动态选择,因此不能在查询中硬编码。
问题是当 SQL 由 nhibernate 生成时,它以字符串的形式传入数据类型,而它周围不应该有任何引号。
所以生成的sql看起来像:
(convert(@p3, this_.theColumn) LIKE @p4
什么时候需要:
(convert(varchar(25), this_.theColumn) LIKE @p4
我绝对确定问题出在,Projections.Constant("varchar(25)")
但我不知道正确的投影语法来使它工作。