2009-07-22 12 views
0

私はサブソニックでサーバー側のページングをしようとしています。 .Paged関数を使用するとうまくいきます(ウェブキャストへのリンクがbtwで壊れているようです)。しかし、どのように私のクエリからレコードの総数を(.Paged関数なしで)行くのですか?つまり、最初に完全な結果を返すクエリでrecordcountを実行する必要がありますか?はいの場合は、サーバー側のページングの目的を少し逸脱しますか?サブソニック+ページングの質問

q = Select.Allfromcolumns .Paged(1,10)は、10個のレコードのみを返します。しかし、製品のレコードの総数を最初に知る必要があります。

単純な表の場合、サーバー側のページングは​​必要ありませんが、私の照会は非常に複雑で、主にパフォーマンスのためにページング機能を使用する必要があります。

おかげ

答えて

3

は、以下が返された後、呼び出しされますどのように多くのレコードを見つけるために、それにGetRecordCount()を呼び出し、その後、あなたはあなたのクエリを構築することができるように返されるレコードの合計数のカウントを返します。最初のページ戻るには(1、10)ページング:

SqlQuery query = Select.AllColumnsFrom<Product>(); 
int numberOfRecords = query.GetRecordCount(); 
List<Product> products = query.Paged(1, 10).ExecuteTypedList<Product>(); 
+0

はいますが、サーバー側のページングを行うための全体の理由は、私が最初でRecordCountを行い、その後、私は再びページングをすれば何が起こるかである、二回データベースを照会したくないということです。 –

+1

RecordCountはSelect Countを実行しますが、データベースにクエリーを行わずにデータベースに記録されているレコードの数を調べるにはどうすればよいですか? –

1

を私は誰かが「サーバーサイド」ページングを行う際に一般的に、彼らはすべての行を返すクエリを実行することを指摘したいと思います。彼らは行数(レコード数)を取得し、ユーザーに表示するために必要な行を取得し、そのサブセットを表示します(オーバーヘッドと処理の良さ)。最初のリクエストで「numberofRecords」をキャッシュし、後続のリクエストごとに、データベースから必要な行のみを戻すPaged問合せを実行する場合、Adamによって送信された問合せを使用すると、オーバーヘッドが大幅に削減されます。

+0

あなたのお返事ありがとうございます –

1
SqlQuery query = Select.AllColumnsFrom<Product>(); 
if(IsfirstCall){//Set firstCall = false on all subsequent calls to the method 
int numberOfRecords = query.GetRecordCount(); } 
List<Product> products = query.Paged(1, 10).ExecuteTypedList<Product>();