我有一个sql视图,其中每列的数据类型是string,与jquery datatables插件一起使用。
string
其中一列包含英国格式的日期dd / mm / yyyy。
该列需要保留一个字符串以用于插件的击键过滤,但是对于排序,需要将其视为日期。
我正在使用nhibernate条件创建sql查询,并且我想生成以下order by子句,因为这可以正确地对日期进行排序
order by CONVERT (datetime, DateOfBirth, 103)
但是,Nhibernate.Criterion.Projections没有Convert方法。有Cast,但由于它是英国日期格式,因此出现以下错误:
Nhibernate.Criterion.Projections
Convert
Cast
The conversion of a varchar data type to a datetime data type resulted in an out-of-range value
我已经尝试过以下方法:
criteria.AddOrder( Order.Desc( Projections.SqlFunction( "CONVERT", NHibernateUtil.DateTime, new IProjection[] { Projections.Property(propNames[orderByColumn]), Projections.Property("104") } ) ) );
但是我收到以下错误消息:
NHibernate.HibernateException: Current dialect NHibernate.Dialect.MsSql2008Dialect doesn't support the function: CONVERT
使用时可以使用SQL转换功能Nhibernate.Criterion吗?
Nhibernate.Criterion
如果设置 104 不是必需的,我们可以快速解决:使用CAST而不是CONVERT。此SQL函数内置在NHibernate方言中:
Projections.Cast(NHibernateUtil.DateTime ,Projections.Property(propNames[orderByColumn]))
如果设置 104 很重要,我们可以创建自己的 方言 ,注册CONVERT函数,然后从此开始使用它…直到永远