Сортировка NHibernate (SQL как второй вариант) - PullRequest
4 голосов
/ 29 июля 2010

Я использую 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");
        }
    }

Ответы [ 2 ]

2 голосов
/ 29 июля 2010

Возможно, вы сможете создать собственный порядок сортировки, чтобы справиться с этим с помощью critiera api; см. этот вопрос для примера реализации.

1 голос
/ 29 июля 2010
 IN SQL ORDER BY will be

  ORDER by case UrgencyId when 4 then 4 else 0 end, CreateDate desc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...