Можно ли иметь разные значения с 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
Другие вопросы по тегам