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))
导致错误“无法解析属性:项目”
干杯, 马特
答案 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)")