.net 具有非fieldname列的nHibernate上的AddOrder

.net 具有非fieldname列的nHibernate上的AddOrder,.net,nhibernate,.net,Nhibernate,nHibernate允许您轻松地对列名进行排序,只要列名与映射匹配。例如: Map(Function(x) x.CreatedOn) criteria = criteria.AddOrder(New Global.NHibernate.Criterion.Order("CreatedOn", True)) 一切都是光明正大和舒适的 但是,我很难通过从对象推断而不是直接映射的属性来获得正确的语法顺序。我甚至不确定后者是否可行。考虑以下事项: HasMany(Function(x) x.

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))
导致错误“无法解析属性:项”

干杯,
Matt

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

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)")

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

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)")