ページングをサポートするデータを選択するNHibernate基準を作成しています。Ayende Rahienが提案したように、SQL Server 2005(+)の式を使用して、COUNT(*) OVER()
使用可能な行の総数を取得しています。合計で何ページあるかを計算できるようにするには、その数が必要です。このソリューションの利点は、行数を取得するために2番目のクエリを実行する必要がないことです。
しかし、私はうまくいく基準を書くことができないようです(AyendeはHQLクエリのみを提供します)。
これが私が欲しいものを示すSQLクエリであり、それはうまく機能します。問題に焦点を合わせるために、実際のページングロジックを意図的に省略していることに注意してください。
SELECT Items.*, COUNT(*) OVER() AS rowcount
FROM Items
HQLは次のとおりです。
select
item, rowcount()
from
Item item
rowcount()
関数はカスタムNHibernate方言に登録されCOUNT(*) OVER()
、SQLで解決されることに注意してください。
要件は、クエリが基準を使用して表現されることです。残念ながら、私はそれを正しくする方法がわかりません:
var query = Session
.CreateCriteria<Item>("item")
.SetProjection(
Projections.SqlFunction("rowcount", NHibernateUtil.Int32));
私がプロジェクションを追加するときはいつでも、NHibernateはitem
(プロジェクションがない場合のように)選択しませんrowcount()
が、私が本当に両方を必要としている間だけです。また、全体を投影することはできませんitem
。プロパティだけであり、すべてをリストしたくはありません。
誰かがこれに対する解決策を持っていることを願っています。とにかくありがとう。