代码之家  ›  专栏  ›  技术社区  ›  Bob Tway

具有非字段名列的nhibernate上的addorder

  •  1
  • Bob Tway  · 技术社区  · 14 年前

    nhibernate允许您轻松地对列名进行排序,只要列名与映射匹配。例如:

     Map(Function(x) x.CreatedOn)
    
    
     criteria = criteria.AddOrder(New Global.NHibernate.Criterion.Order("CreatedOn", True))
    

    都是上乘舒适的。

    但是,我很难获得正确的语法来按属性排序,这些属性是从对象推断的,而不是直接映射的。我甚至不确定后者是否可行。考虑以下内容:

     HasMany(Function(x) x.Shipments).Cascade.SaveUpdate()
    
    Public Overridable ReadOnly Property Items() As IList(Of OrderItem)
        Get
            Return Shipments.SelectMany(Function(x) x.Items).ToList().AsReadOnly()
        End Get
    End Property
    

    在那种情况下,一个订单是如何计算的?尝试目标:

    criteria = criteria.AddOrder(New Global.NHibernate.Criterion.Order("Items.Count", True))
    

    导致错误“无法解析属性:项”

    干杯, 马特

    1 回复  |  直到 14 年前
        1
  •  1
  •   James Kovacs    14 年前

    要按组件的一部分排序,您需要指定属性名,然后指定组件部分,只需询问您是否在代码中从对象访问它。

    criteria = criteria.AddOrder(New Global.NHibernate.Criterion.Order("Name.Surname", True))
    

    对于您的第二个问题,这不是很容易用标准完成的,但是可以用hql编写:

    query = session.CreateQuery("select s from Shipment s order by size(s.Items)")