2009-02-16 9 views

Respuesta

30

En realidad es bastante fácil en HQL:

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

No sabe cómo hacer esto utilizando la API de criterios embargo.

+0

+1. Huh eso es bastante raro. Pensé que la respuesta sería parte de la cadena HQL "tunneled". Interesante. – BuddyJoe

+3

Esta respuesta es en realidad un híbrido de HQL y los criterios API –

+0

sí ... básicamente es lo mismo que criterios ... simplemente reemplace con 'CreateCriteria ()' – dotjoe

10

los criterios del API Método:

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

+1. Tendré que investigar este MaximumObjects. Muy genial. – BuddyJoe

+1

MaximumObjects es solo una variable entera para decirle a SetMaxResults cuántos objetos debe devolver. En su caso, podría codificar 15 en su lugar, es decir, los criterios. SetMaxResults (15); –

+0

Haha ... en otras palabras, es idéntico a CreateQuery() después de que se crea la instancia. –

0

Para completar, aquí es cómo hacerlo con el QueryOver API introducido en NHibernate 3.0:

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

tiro en un .Skip(someInt) si es necesario definir una índice de inicio, por ejemplo para paginación.

0

mookid8000 proporciona información falsa.

no hay manera de establecer SQL TOP N con HQL :(

siempre se descarga toda la mesa para .NET y la toma del TOP, cuyo está completamente estúpidos!

2

De NHibernate 3.2 usted podría utilizar SKIP n/TAKE n en HQL al final de la consulta podría ser muy útil en subconsultas donde no se puede utilizar SetMaxResults

Por ejemplo:..

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