NHibernate HQL эквивалентен ключевому слову T-SQL TOP
Что такое NHibernate HQL, эквивалентное ключевому слову T-SQL TOP?
И что такое не-HQL-способ для высказывания, дайте мне первые 15 классов?
Ответы
Ответ 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 и занимает верхнюю часть, что просто глупо!