NHibernate HQL эквивалентен ключевому слову TOP-T-SQL - PullRequest
23 голосов
/ 17 февраля 2009

Что такое NHibernate HQL, эквивалентный ключевому слову TOP-T-SQL?

Также, как не-HQL способ дать мне первые 15 классов?

Ответы [ 5 ]

33 голосов
/ 17 февраля 2009

В HQL это довольно просто:

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

Не знаю, как это сделать, используя API критериев.

10 голосов
/ 17 февраля 2009

Критерии API Метод:

ICriteria criteria = DaoSession.CreateCriteria(typeof(T));
criteria.SetFirstResult(StartIndex);
criteria.SetMaxResults(MaximumObjects);
return criteria.List<T>();
4 голосов
/ 09 апреля 2015

В NHibernate 3.2 вы можете использовать SKIP n / TAKE n в hql в конце запроса. Это может быть очень полезно в подзапросах, где вы не можете использовать SetMaxResults.

Например:

select l, (select u from User u where u.Location = l order by u.Date asc take 1) 
from Location l
0 голосов
/ 14 июня 2013

mookid8000 дает ложную информацию.

нет способа установить SQL TOP N с HQL: (

он всегда загружает все таблицы в .NET и берет ТОП, который просто глуп!

0 голосов
/ 06 декабря 2012

Для полноты вот как это сделать с помощью API QueryOver, представленного в NHibernate 3.0:

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

Добавьте .Skip(someInt), если вам нужно определить начальный индекс, например, для подкачки.

...