NHibernate. Сортировать по результату функции - PullRequest
6 голосов
/ 08 июля 2011

Мне нужен NHibernate для выполнения такого запроса:

SELECT * 
FROM Users
ORDER BY Func(FirstName, LastName)

Стандартный NHibernate Order класс не позволяет этого делать. Есть ли другой способ?
Дело в том, что именованные запросы и HQL не подходят в качестве решения.

РЕДАКТИРОВАТЬ: Я обнаружил, что можно делать на SQL:

SELECT *, Func(FirstName, LastName) AS FullName 
FROM Users
ORDER BY FullName

Итак, возможно, можно добавить дополнительное поле к критериям (или может быть проекцией), как в этом примере?

1 Ответ

14 голосов
/ 08 июля 2011

Прежде всего, вам не нужно создавать «полное имя», чтобы упорядочить его по двум столбцам.Вы можете сделать это следующим образом:

SELECT * 
FROM Users
ORDER BY FirstName, LastName

-Edit

Или, если вы хотите определить порядок, вы можете включить «asc / desc» после каждого столбца:

SELECT * 
FROM Users
ORDER BY FirstName DESC, LastName ASC

-Конец редактирования

Что касается порядка в NHibernate, если вы используете QueryOver, вы можете сделать:

var result = Session.QueryOver<Users>()
                    .OrderBy(x => x.FirstName).Desc
                    .ThenBy(x => x.LastName).Desc
                    .List();

Что касается критериев, я думаю (не уверен на 100%), что выможно сделать:

var result = Session.CreateCriteria(typeof(Users))
                    .AddOrder(Order.Desc("FirstName"))
                    .AddOrder(Order.Desc("LastName"))
                    .List<Users>();
...