一尘不染

NHibernate排序(SQL作为第二种选择)

sql

我正在使用NHibernate作为我的ORM,并且正在尝试对一些数据进行排序。需要分页检索数据。

我的请求表中的两列是UrgencyID和CreateDate。UrgencyID是具有静态数据的Urgency表的FK:1 =低,2 =正常,3 =高,4
=严重。

我需要以以下方式订购我的请求。由CreateDate降序的关键请求由CreateDate降序的所有其他请求

因此,我的请求列表应始终在顶部按CreateDate desc列出Critical,然后对所有其他请求按CreateDate
desc排序(不考虑UrgencyID)

是否可以在NHibernate中执行这种排序顺序(使用Criteria API)?

如果没有,我将如何在SQL中执行此操作?在存储过程中?

编辑:解决方案感谢@DanP和@Michael Pakhantsov

在sql字符串中使用this_前缀,因为这是主表选择的默认NHibernate前缀。

public class OperatorJobQueueOrder : Order
    {
        public OperatorJobQueueOrder() : base("", true) { }
        public override NHibernate.SqlCommand.SqlString ToSqlString(ICriteria criteria, ICriteriaQuery criteriaQuery)
        {
            return new NHibernate.SqlCommand.SqlString("case this_.JobRequestUrgencyID when 4 then 4 else 0 end desc, this_.CreatedDate");
        }
    }

阅读 206

收藏
2021-05-23

共1个答案

一尘不染

 IN SQL ORDER BY will be

  ORDER by case UrgencyId when 4 then 4 else 0 end, CreateDate desc
2021-05-23