用于分页到HQL / Criteria的NHibernate SQL查询

时间:2010-06-30 12:15:12

标签: c# nhibernate fluent-nhibernate hql icriteria

我正在根据row_number()进行排序和返回X行的查询 我正在使用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()og .SetFirstResult()

提前致谢!

2 个答案:

答案 0 :(得分:4)

尽量避免在nHibernate中使用纯SQL。

在Criteria对象上,使用SetFirstResult()和SetMaxResult()进行分页。

10条记录的页数?第一页是criteria.SetFirstResult(0).SetMaxResult(10)和第三页是criteria.SetFirstResult(20).SetMaxResult(10)

始终使用正确的方言。例如,SQL Server 2008具有比SQL Server 2005更多的分页功能。

答案 1 :(得分:1)

这是一篇很棒的文章,可以做你想要的 http://www.tobinharris.com/past/2008/10/20/almost-iqueryable-with-nhibernate-hql/