2009-06-11 18 views
0

LINQ to SQLを使用してかなり大きなデータベースを検索しており、DataPagerでページングを実行する最適な方法がわかりません。私はSkip()とTake()メソッドを認識しており、それらが適切に動作するようにしています。ただし、データページャの結果のカウントは使用できません。常にTake()メソッドで決定されたページサイズになるためです。例えばLINQ to SQLとDataPager

var result = (from c in db.Customers 
       where c.FirstName == "JimBob" 
       select c).Skip(0).Take(10); 

このクエリは、常に1000年JimBobsがあっても、10の以下の結果を返します。その結果、DataPagerは常に1つのページがあると考え、ユーザーは結果セット全体をナビゲートできません。私は著者がちょうどトータルカウントを得るために別のクエリを書いて、それを呼んだ1つのオンライン記事を見てきました。

int resultCount = (from c in db.Customers 
        where c.FirstName == "JimBob" 
        select c).Count(); 

とDataPagerのためにその値を使用:のような

何か。しかし、私は実際にはすべてのクエリをコピーして別の呼び出しに貼り付ける必要はなく、明らかな理由で結果をページングしたいと思っています。複数のクエリで再利用できる簡単な方法はありますか?

ありがとうございました。

答えて

0

このような状況では、データベースからの結果セットのフィールドとして合計レコード数を返すことがあります。

基本的には、2つのオプションしかありません。カウントのために別のクエリを作成するか、結果として列として返します。

0

LINQはdefferredクエリの実行を提供することを忘れないでください...

var qry =  from c in db.Customers    
       where c.FirstName == "JimBob" 
       select c; 

int resultCount = qry.Count(); 

var results = qry.Skip(0).Take(10); 
+0

感謝。私は実際にサイトから要求されたパフォーマンスを得ることができなかったので、このアプローチから転記しました。上のコードは一度データベースにヒットするだけですか? –

+0

いいえ、データベースに2回ヒットします。 – TGnat