Сегодня сталкивался с чем-то подобным и задавался вопросом, существует ли эквивалентный способ решения этой проблемы в запросах критериев.
По сути, есть таблица, и в этой таблице есть два строковых поля, которые могут содержать значения 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 или сортировка по факту?