Я использую NHibernate в качестве своего ORM и пытаюсь отсортировать некоторые данные. Данные должны быть извлечены постранично.
Два столбца в моей таблице запросов - это UrgencyID и CreateDate. UrgencyID представляет собой FK для таблицы срочности со статическими данными:
1 = низкий, 2 = нормальный, 3 = высокий, 4 = критический.
Мне нужно заказать мои заявки следующим образом.
Критические запросы по убыванию CreateDate
Все остальные запросы по CreateDate по убыванию
Таким образом, мой список запросов должен всегда иметь Critical by CreateDate desc вверху, а затем все другие запросы (без учета UrgencyID) CreateDate desc
Можно ли выполнить этот порядок сортировки в NHibernate (с помощью API Criteria)?
Если нет, как бы я сделал это в SQL? В хранимой процедуре?
РЕДАКТИРОВАТЬ: Решение благодаря @DanP и @Mikhael Pakhantsov
Использование префикса this_ в строке sql, так как это префикс 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");
}
}