nHibernate上的AddOrder带有非fieldname列

时间:2010-11-18 16:17:53

标签: .net nhibernate

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

在这种情况下,如何通过Items.Count订购?试着明白:

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

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

干杯, 马特

1 个答案:

答案 0 :(得分:1)

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

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

至于你的第二个问题,使用Criteria并不容易实现,但可以使用HQL轻松编写:

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