1

row_number() に基づいて X 行を並べ替えて返すクエリを作成しています。MSSQL で NHibernate を使用しており、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]

プレーンSQLの代わりにHQLまたはICriteria(さらに良い)を使用してこれを機能させる方法を知っている人はいますか? この理由は、SQLite と MS SQL Server 2005 の両方と互換性のあるクエリが必要で、.SetMaxResult() または .SetFirstResult() を使用できるようにするためです。

前もって感謝します!

4

2 に答える 2

4

nHibernate でプレーン SQL を使用しないようにしてください。

Criteria オブジェクトでは、ページングに SetFirstResult() と SetMaxResult() を使用します。

10 レコードのページ ? 最初のページは criteria.SetFirstResult(0).SetMaxResult(10) で、3 ページ目は criteria.SetFirstResult(20).SetMaxResult(10) です。

常に正しい方言を使用してください。たとえば、SQL Server 2008 には、SQL Server 2005 よりも多くのページング機能があります。

于 2010-06-30T12:23:38.790 に答える
1

これは、あなたが望むことを行うための優れた記事です http://www.tobinharris.com/past/2008/10/20/almost-iqueryable-with-nhibernate-hql/

于 2011-08-19T13:39:35.030 に答える