2009-02-16 14 views

cevap

30

O HQL aslında oldukça kolaydır:

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

olsa kriterler API kullanarak bunu nasıl bilmiyorum.

+0

+1. Huh oldukça garip. Cevabın HQL "tünel" dizesinin bir parçası olacağını düşündüm. İlginç. – BuddyJoe

+3

Bu yanıt aslında HQL ve ölçütler API –

+0

yean bir melezidir.Aşağıdaki kriterlerle aynıdır ... sadece 'CreateCriteria () ' – dotjoe

10

Kriterler API Yöntem: Bir tanımlamak gerekirse bir .Skip(someInt) içinde

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

Atış: Bütünlüğü için

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

+1. Bu MaximumObjects'e bakmak zorundayım. Oldukça havalı. – BuddyJoe

+1

MaximumObjects, SetMaxResults'a kaç nesnenin döndüğünü bildiren bir tamsayı değişkeni. Sizin durumunuzda, bunun yerine 15 kod koduna sahip olabilirsiniz, yani, kriteri.SetMaxResults (15); –

+0

Haha ... diğer bir deyişle, örnek oluşturulduktan sonra CreateQuery() ile aynıdır. –

0

, burada NHibernate 3.0 tanıtılan QueryOver API ile bunu nasıl olduğunu endeksi başlat, örneğin çağrı için.

0

mookid8000 yanlış bilgi veriyor.

her zaman .NET için tablonun tüm indirir ve TOP alır :(HQL ile SQL TOP N ayarlama yolu yoktur

, hangi! Düpedüz aptallık NHibernate 3.2 itibaren

2

sorgunun sonunda hql içinde SKIP n/TAKE n kullanabilirsiniz sen SetMaxResults kullanamazsınız nerede alt sorgular çok yardımcı olabilir Örneğin

:..

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