Сложный заказ с запросами критериев NHibernate - PullRequest
1 голос
/ 23 февраля 2010

Сегодня сталкивался с чем-то подобным и задавался вопросом, существует ли эквивалентный способ решения этой проблемы в запросах критериев.

По сути, есть таблица, и в этой таблице есть два строковых поля, которые могут содержать значения NULL (foo и bar). Мы хотим отсортировать их по совокупности.

конкатенация строк (order by foo + bar desc) возвращает ноль, если одно из значений равно нулю, а order by foo, bar не учитывает нули, как нам хотелось бы.

решение в sql может выглядеть так:

SELECT foo, bar, (ISNULL(foo,'') + ISNULL(bar,'')) as f
FROM foobar
ORDER BY f DESC

Я не уверен в деталях внутри токенизатора nhibernate, но если бы вы записали его как

SELECT foo, bar
FROM foobar
ORDER BY (ISNULL(foo,'') + ISNULL(bar,'')) DESC

используя тот же метод запроса, который он задушил, потому что он анализирует и foo, и bar как отдельные выражения сортировки.

Итак ... как бы вы написали это в запросе критериев? Существует ли такой метод, или единственным вариантом будет новый ResultTransformer или сортировка по факту?

1 Ответ

3 голосов
/ 24 февраля 2010

Вы должны создать свойства только для запросов (access="noop", см. http://ayende.com/Blog/archive/2009/06/10/nhibernate-ndash-query-only-properties.aspx) с соответствующей формулой.

Например,

<property name="SortableFoo" formula="ISNULL(foo,'')"/>

И теперь вы можете AddOrder с этим «Свойством».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...