NHibernate SQLquery для подкачки на HQL / ICriteria - PullRequest
1 голос
/ 30 июня 2010

Я делаю запрос, который сортирует и возвращает X строк на основе row_number (). Я использую NHibernate с MSSQL, и я пытаюсь заставить пейджинг работать с использованием CreateSQLQuery, и у меня есть этот запрос:

select s.*   

from(

select distinct release.[stop], survey.SurveyId, survey.Created, survey.CopyOfId, survey.DesignTemplateId, survey.UserId, survey.Template, [Row] = Row_Number() over (order by survey.[SurveyId])

from    Survey               as survey
inner join  Release              as release  on release.SurveyId   = survey.SurveyId

group by    survey.SurveyId
,           survey.Created
,           survey.CopyOfId
,           survey.DesignTemplateId
,           survey.UserId
,           survey.Template
,   release.[stop]

) as s

where s.[Row] >= 0 and s.[Row] <= 20
order by s.[stop]

Кто-нибудь знает, как заставить это работать, используя HQL или ICriteria (даже лучше) вместо простого SQL?Причина этого в том, что мне нужен запрос, совместимый как с SQLite, так и с MS SQL Server 2005, чтобы я мог использовать .SetMaxResult () или .SetFirstResult ()

Заранее спасибо!

Ответы [ 2 ]

4 голосов
/ 30 июня 2010

Старайтесь избегать использования простого SQL в nHibernate.

В объекте Criteria используйте SetFirstResult () и SetMaxResult () для подкачки.

Страницы из 10 записей?Первая страница - это критерии. SetFirstResult (0). SetMaxResult (10), а третья страница - критерии. SetFirstResult (20). SetMaxResult (10)

Всегда используйте правильный диалект.Например, SQL Server 2008 имеет больше функций подкачки, чем SQL Server 2005.

1 голос
/ 19 августа 2011

Вот отличная статья, чтобы делать то, что вы хотите http://www.tobinharris.com/past/2008/10/20/almost-iqueryable-with-nhibernate-hql/

...