NHibernate排序(SQL作为第二个选项)

NHibernate排序(SQL作为第二个选项),sql,nhibernate,sorting,Sql,Nhibernate,Sorting,我正在使用NHibernate作为我的ORM,我正在尝试对一些数据进行排序。数据需要分页检索 我的请求表中的两列是UrgencyID和CreateDate。UrgencyID是紧急情况表的FK,包含静态数据: 1=低,2=正常,3=高,4=临界 我需要按照以下方式来处理我的请求。 按CreateDate降序排列的关键请求 按CreateDate降序排列的所有其他请求 因此,我的请求列表的顶部应该始终有CREATIC by CreateDate desc,然后是CreateDate desc的所有

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

我的请求表中的两列是UrgencyID和CreateDate。UrgencyID是紧急情况表的FK,包含静态数据: 1=低,2=正常,3=高,4=临界

我需要按照以下方式来处理我的请求。 按CreateDate降序排列的关键请求 按CreateDate降序排列的所有其他请求

因此,我的请求列表的顶部应该始终有CREATIC by CreateDate desc,然后是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");
        }
    }

您可以通过critiera api创建自定义排序顺序来处理此问题;参见示例实现。

感谢您的帮助这里的两个答案都帮助我实现了结果-使用您提供的定制NHibernate排序sql。有没有可能奖励部分回答问题的人?@Ciaran:Michael首先回答,你应该接受他的回答。如果你使用了我们答案的组合;为什么不编辑您的帖子以包含完整的解决方案?
 IN SQL ORDER BY will be

  ORDER by case UrgencyId when 4 then 4 else 0 end, CreateDate desc