Qu'est-ce que l'équivalent de NHibernate HQL au mot-clé TOP de T-SQL?NHibernate HQL équivaut au mot clé TOP de T-SQL
Aussi ce qui est la façon non-HQL de dire donne-moi les 15 premiers d'une classe?
Qu'est-ce que l'équivalent de NHibernate HQL au mot-clé TOP de T-SQL?NHibernate HQL équivaut au mot clé TOP de T-SQL
Aussi ce qui est la façon non-HQL de dire donne-moi les 15 premiers d'une classe?
Il est en fait assez facile à HQL:
var top15 = session.CreateQuery("from SomeEntity")
.SetFirstResult(0)
.SetMaxResults(15)
.List<SomeEntity>();
Je ne sais pas comment faire cela en utilisant l'API de critères bien.
Critères API Méthode:
ICriteria criteria = DaoSession.CreateCriteria(typeof(T));
criteria.SetFirstResult(StartIndex);
criteria.SetMaxResults(MaximumObjects);
return criteria.List<T>();
+1. Je vais devoir regarder dans ce MaximumObjects. Plutôt cool. – BuddyJoe
MaximumObjects est simplement une variable entière pour indiquer à SetMaxResults le nombre d'objets à renvoyer. Dans votre cas, vous pouvez écrire le code 15 à la place, c'est-à-dire criteria.SetMaxResults (15); –
Haha ... donc en d'autres termes, il est identique à CreateQuery() après la création de l'instance. –
Pour être complet, voici comment le faire avec l'API QueryOver
introduit dans NHibernate 3.0:
var top15 = session.QueryOver<SomeEntity>().Take(15).List();
Throw dans un .Skip(someInt)
si vous devez définir un indice de départ, par exemple pour la pagination.
mookid8000 donne de fausses informations.
il n'y a aucun moyen de réglage SQL TOP N avec HQL :(
il télécharge toujours tout de la table à .NET et prend le TOP, Wich est tout simplement stupide!
De NHibernate 3.2 vous pouvez utiliser SKIP n/TAKE n
dans hql à la fin de la requête Il pourrait être très utile dans les sous-requêtes où vous ne pouvez pas utiliser SetMaxResults
Par exemple:..
select l, (select u from User u where u.Location = l order by u.Date asc take 1)
from Location l
+1. Huh c'est plutôt bizarre. Je pensais que la réponse ferait partie de la chaîne "tunnelée" HQL. Intéressant. – BuddyJoe
Cette réponse est en fait un hybride de HQL et les critères API –
yea..it est essentiellement le même que les critères ... il suffit de remplacer par 'CreateCriteria()' –
dotjoe