2010-11-18 30 views
1

只要列名與映射匹配,nHibernate就可以輕鬆地對列名進行排序。所以,舉個例子:nHibernate上的非字段名列的AddOrder

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命令?嘗試objvious:

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

導致了「無法解析屬性:項」錯誤

乾杯, 馬特

回答

1

要由組件的一部分訂購,你會指定屬性名然後是組件部分,只是詢問您是否在代碼中訪問它的對象。

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