我正在使用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"); } }
IN SQL ORDER BY will be ORDER by case UrgencyId when 4 then 4 else 0 end, CreateDate desc