NHibernate排序(SQL作为第二个选项)
我正在使用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前缀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的所有
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