2009-02-16 51 views

回答

30

這其實很容易HQL:

var top15 = session.CreateQuery("from SomeEntity") 
       .SetFirstResult(0) 
       .SetMaxResults(15) 
       .List<SomeEntity>(); 

不知道如何使用標準的API,雖然做到這一點。

+0

+1。這很奇怪。我認爲答案將成爲HQL「隧道」字符串的一部分。有趣。 – BuddyJoe 2009-02-16 23:50:29

+3

這個答案實際上是HQL和標準API – 2009-06-28 04:59:41

10

標準API方法:

ICriteria criteria = DaoSession.CreateCriteria(typeof(T)); 
criteria.SetFirstResult(StartIndex); 
criteria.SetMaxResults(MaximumObjects); 
return criteria.List<T>(); 
0

爲了完整起見,在這裏是如何與QueryOver API NHibernate的3.0中引入做到這一點:

var top15 = session.QueryOver<SomeEntity>().Take(15).List(); 

扔在一個.Skip(someInt)如果你需要定義一個開始索引,例如尋呼。

0

mookid8000正在提供虛假信息。

沒有設置SQL TOP N與HQL :(

它總是下載所有的表到.NET和採取TOP的方式,至極,只是普通的笨!

2

從NHibernate的3.2你可以在HQL在查詢的末尾使用SKIP n/TAKE n這可能是在子查詢中非常有用的,你不能使用SetMaxResults

例如:。

select l, (select u from User u where u.Location = l order by u.Date asc take 1) 
from Location l