是否可能与nhibernate具有不同的值
本文关键字:nhibernate 是否 | 更新日期: 2023-09-27 18:20:31
我有一个正在排序的person对象:
persCriteria = criteria.GetExecutableCriteria(Session)
.AddOrder(Order.Asc("LastName"))
.AddOrder(Order.Asc("FirstName"));
我还有一个名为CommonName
的属性。
我想要什么?如果这个人在FirstName
上有一个CommonName
,那么我希望能够在CommonName
上排序(首先)。
现在我想知道是否可以通过NHibernate指示,如果该人有CommonName
,则应按CommonName
订购,否则按FirstName
订购?如果是,怎么做?
这是可能的。我们可以使用条件投影:
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