2010-03-07 66 views
0

如何限制nHibernate中映射集合的結果集?例如:nHibernate:限制映射集合的結果集

Model.Items; 

將始終返回給定模型的所有項目。有什麼辦法可以強制它只返回,比如說20個項目而不創建具體的查詢?類似於

Model.Items.SetMaxResults(20); 

換句話說,當我訪問集合時,我希望nHibernate返回IQueryable而不是簡單的IList。

更新。雖然我已經接受了答案,但我想指出,這不符合nHibernate預期的使用方式,並且應該在單獨的查詢中加載和限制子集合。

+0

你試圖解決的問題是什麼,典型的Items集合有多大? – 2010-03-08 00:55:07

+0

幾百個項目正在被加載。 – 2010-03-25 02:50:36

回答

1

你想要什麼可以用濾波器來實現:

IQuery q = nhSession.CreateFilter(Parent.ChildCollection, "select count(*)"); 
long countResult = q.UniqueResult<long>(); 

當你看到在IQUERY過濾器,你是不是僅限於「SELECT COUNT」範式我只是給。 此外,此解決方案需要映射常規集合,以便您可以多種方式使用它。

1

.SetProjection(Projections.Property( 「項目」)) .SetMaxResults(20)

+0

這將適用於ICriteria,而不是映射。 – 2010-03-07 15:43:22

+0

using System.Linq; (Model) .SetProjection(...)。list(); IQueryable q = results.AsQueryable(); – garik 2010-03-08 17:32:51

+0

Nhibernate具有此參數用於映射集合。但是,看起來,這是與你想要的不同的東西,我想。所以只有Criteria允許動態地控制抓取記錄。 – garik 2010-03-08 17:39:58

0

是的,你可以使用<loader /> mapping元素指定的查詢將加載集合。更多的信息可以在herehere找到。

+0

這很酷,但它不會讓我在訪問集合點時爲LIMIT指定參數,這正是我想要的。 – 2010-03-07 15:44:50