是否可能与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订购?如果是,怎么做?

是否可能与nhibernate具有不同的值

这是可能的。我们可以使用条件投影:

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