一尘不染

通过nHibernate准则使用SQL CONVERT函数

sql

我有一个sql视图,其中每列的数据类型是string,与jquery datatables插件一起使用。

其中一列包含英国格式的日期dd / mm / yyyy。

该列需要保留一个字符串以用于插件的击键过滤,但是对于排序,需要将其视为日期。

我正在使用nhibernate条件创建sql查询,并且我想生成以下order by子句,因为这可以正确地对日期进行排序

order by CONVERT (datetime, DateOfBirth, 103)

但是,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吗?


阅读 162

收藏
2021-05-05

共1个答案

一尘不染

如果设置 104 不是必需的,我们可以快速解决:使用CAST而不是CONVERT。此SQL函数内置在NHibernate方言中:

Projections.Cast(NHibernateUtil.DateTime
               ,Projections.Property(propNames[orderByColumn]))

如果设置 104 很重要,我们可以创建自己的 方言 ,注册CONVERT函数,然后从此开始使用它…直到永远

2021-05-05