我有一个人物,我正在整理:
persCriteria = criteria.GetExecutableCriteria(Session)
.AddOrder(Order.Asc("LastName"))
.AddOrder(Order.Asc("FirstName"));
我还有一个名为CommonName
的属性。
我想要什么?好吧,如果此人在CommonName
(第一个)上排序CommonName
,我希望能够对FirstName
进行排序。
现在我想知道是否有可能通过 NHibernate 指示如果此人在CommonName
之前有CommonName
个其他订单,它应该由FirstName
订购?如果是这样,怎么样?
答案 0 :(得分: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