Подтвердить что ты не робот

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

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

И что такое не-HQL-способ для высказывания, дайте мне первые 15 классов?

4b9b3361

Ответ 1

На самом деле это довольно легко в HQL:

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

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

Ответ 2

Метод API критериев:

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

Ответ 3

Из 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

Ответ 4

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

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

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

Ответ 5

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

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

он всегда загружает всю таблицу в .NET и занимает верхнюю часть, что просто глупо!