1

我有一个要排序的人对象:

 persCriteria = criteria.GetExecutableCriteria(Session)  
                .AddOrder(Order.Asc("LastName"))
                .AddOrder(Order.Asc("FirstName"));

我还有一个名为CommonName.

我想要什么?CommonName好吧,如果这个人有CommonName其他排序FirstName(首先),我希望能够排序。

现在我想知道是否可以通过NHibernateCommonName指示如果该人有CommonNameelse order by则应该 orderby FirstName?如果是这样,怎么办?

4

1 回答 1

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
于 2013-07-02T02:43:05.773 回答