Можно ли иметь разные значения с Nhibernate?
У меня есть объект человека, который я сортирую:
persCriteria = criteria.GetExecutableCriteria(Session)
.AddOrder(Order.Asc("LastName"))
.AddOrder(Order.Asc("FirstName"));
У меня также есть атрибут под названием CommonName
,
Чего я хочу? Ну, я хочу иметь возможность сортировать по CommonName
если у человека есть CommonName
еще сортировать по FirstName
(первый).
Теперь мне интересно, можно ли через NHibernate указать, что он должен CommonName
если у человека есть CommonName
еще заказ по FirstName
? И если да, то как?
1 ответ
Решение
Это возможно. Мы можем использовать условную проекцию:
var conditionalOrderBy = Projections.Conditional
(
Restrictions.IsNull("CommonName") // or LastName, not sure from a question snippet
, Projections.Property("FirstName")
, Projections.Property("CommonName") // or LastName
);
var list = criteria.GetExecutableCriteria(session)
.AddOrder(new Order(conditionalOrderBy, true))
.List<Person>()
;
И оператор SQL, который мы получаем, будет выглядеть так:
...
ORDER BY (CASE when this_.CommonName IS NULL
THEN this_.FirstName
ELSE this_.CommonName END)
ASC