是否可以使用nhibernate具有不同的值?

时间:2013-07-01 15:05:52

标签: c# nhibernate nhibernate-criteria

我有一个人物,我正在整理:

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

我还有一个名为CommonName的属性。

我想要什么?好吧,如果此人在CommonName(第一个)上排序CommonName,我希望能够对FirstName进行排序。

现在我想知道是否有可能通过 NHibernate 指示如果此人在CommonName之前有CommonName个其他订单,它应该由FirstName订购?如果是这样,怎么样?

1 个答案:

答案 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