【问题标题】:is it possible to have Different values with nhibernate?nhibernate可以有不同的值吗?
【发布时间】:2013-07-01 15:05:52
【问题描述】:

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

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

我还有一个属性叫CommonName

我想要什么?好吧,如果此人有CommonName,我希望能够按CommonName 排序,否则按FirstName(第一)排序。

现在我想知道是否可以通过 NHibernate 表明如果该人有 CommonName 则应该通过CommonName 订购,否则通过FirstName 订购?如果有,怎么做?

【问题讨论】:

    标签: c# nhibernate nhibernate-criteria


    【解决方案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
    

    【讨论】:

    • 完美运行!很抱歉这个模糊的描述……我花了一段时间,这对我来说似乎很清楚,但现在有一天我发现它可能有点难以理解。如果我可能会给您带来更多麻烦...如果您有时间,您能否向我提供有关 nhibernate 的教程链接?我有一项必须通过 nhibernate 和 nopw 完成的任务,它已经解决了,但我从来没有深入了解它,因为我很难找到好的网站。非常感谢!
    猜你喜欢
    • 2017-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-27
    相关资源
    最近更新 更多