2009-05-05 46 views
0

這部分與this有關。
我想找到一種方法直接在Nhibernate查詢中對鏈接(HasMany)收集結果進行排序。在Nhibernate查詢中排序鏈接集合

ICriteria criteria = Session.CreateCriteria(typeof(PortalPage)); 
criteria.CreateAlias("PartialViews", "vc"); 
criteria.AddOrder(Order.Asc("vc.ColumnNumber")); 
criteria.Add(Property.ForName("Url").Eq(pageUrl)); 
return criteria.UniqueResult<PortalPage>(); 

Correcly使用ORDER BY生成一個select,但鏈接集合中的結果沒有排序。

我想避免在返回結果後對數據集進行排序(比如使用linq到對象),這有可能嗎?

UPDATE: 正如史蒂夫提出的問題可以通過硬編碼在這樣的映射順序屬性來解決:

HasMany(x => x.PartialViews).KeyColumnNames.Add("PageId").AsBag().SetAttribute("order-by", "ColumnNumber"); 

回答

1

您所指定的集合作爲一個列表類型,而不是一個包或一組?如果您確保使用列表映射類型併爲列表映射指定索引列,則應該爲您處理所有內容。

查看docs here,還有一些more info here,雖然第二個是舊的文章,所以要留意可能已經改變的事情。

這裏有一個簡單的列表集合映射例如:

<list name="Images table="Images"> 
    <key column="Id"/> 
    <index column="Position"/> 
    <element type="String" column="FileName"/> 
</list> 

這個例子的流利的映射是這樣的:

HasMany(x => x.Images).AsList(x => x.WithColumn("Position")); 
+0

史蒂夫,我的理解,這將迫使我「硬編碼「排序順序。 Linq2Nhibernate或其他方式可以獲得某種動態結果嗎?如果不是,你會如何表達流利的nhibernate相同的映射? – Ronnie 2009-05-06 14:19:26