2009-02-16 7 views

Antwort

30

Es ist eigentlich ziemlich einfach in HQL:

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

Sie wissen nicht, wie Sie dies tun, obwohl die Kriterien API.

+0

+1. Huh, das ist ziemlich komisch. Ich dachte, die Antwort wäre Teil der HQL "getunnelten" Zeichenfolge. Interessant. – BuddyJoe

+3

Diese Antwort ist eigentlich ein Hybrid von HQL und die Kriterien API –

+0

yea.it ist im Wesentlichen das gleiche wie Kriterien ... einfach ersetzen mit CreateCriteria () ' – dotjoe

10

Criteria API Methode:

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

+1. Ich muss in dieses MaximumObjects schauen. Ziemlich cool. – BuddyJoe

+1

MaximumObjects ist nur eine Ganzzahlvariable, um SetMaxResults mitzuteilen, wie viele Objekte zurückgegeben werden sollen. In Ihrem Fall könnten Sie stattdessen 15 fest codieren, d. H. Criteria.SetMaxResults (15); –

+0

Haha ... also mit anderen Worten ist es identisch mit CreateQuery() nachdem die Instanz erstellt wurde. –

0

Der Vollständigkeit halber ist hier, wie es mit den in NHibernate 3.0 eingeführt QueryOver API tun:

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

Wurf in einem .Skip(someInt), wenn Sie ein definieren müssen Startindex, z zum Paging.

0

mookid8000 gibt falsche Informationen.

gibt es keine Möglichkeit SQL TOP N mit HQL der Einstellung :(

lädt es immer alle den Tisch zu .NET und das ist der TOP, ist wich einfach nur dumm!

2

Von NHibernate 3.2 Sie SKIP n/TAKE n in hql am Ende der Abfrage verwenden, könnten es in Unterabfragen sehr hilfreich sein könnte, wo man nicht SetMaxResults

Zum Beispiel verwenden kann:..

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