C# nhibernate是否可能有不同的值?

C# nhibernate是否可能有不同的值?,c#,nhibernate,nhibernate-criteria,C#,Nhibernate,Nhibernate Criteria,我有一个正在排序的person对象: persCriteria = criteria.GetExecutableCriteria(Session) .AddOrder(Order.Asc("LastName")) .AddOrder(Order.Asc("FirstName")); 我还有一个名为CommonName的属性 我想要什么?好吧,我想能够在CommonName上排序,如果此人有CommonName的话,那么就在F

我有一个正在排序的person对象:

 persCriteria = criteria.GetExecutableCriteria(Session)  
                .AddOrder(Order.Asc("LastName"))
                .AddOrder(Order.Asc("FirstName"));
我还有一个名为
CommonName
的属性

我想要什么?好吧,我想能够在
CommonName
上排序,如果此人有
CommonName
的话,那么就在
FirstName
上排序(first)


现在我想知道是否可以通过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>()
;

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

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>()
;

工作得很好!对沃格的描述感到抱歉…我在那里呆了一段时间,我似乎很清楚,但现在有一天我发现这可能有点难以理解。如果我可能会麻烦你一点…如果你有时间,你也许可以为我提供有关nhibernate的教程链接?我有一个任务必须通过nhibernate完成,没有,它已经解决了,但我从来没有详细地做过,因为我很难找到好的网站。非常感谢!工作得很好!对沃格的描述感到抱歉…我在那里呆了一段时间,我似乎很清楚,但现在有一天我发现这可能有点难以理解。如果我可能会麻烦你一点…如果你有时间,你也许可以为我提供有关nhibernate的教程链接?我有一个任务必须通过nhibernate完成,没有,它已经解决了,但我从来没有详细地做过,因为我很难找到好的网站。非常感谢!