0

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

例えば:

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

このクエリは、1000 個の JimBob がある場合でも、常に 10 個以下の結果を返します。その結果、DataPager は常に単一のページであると認識し、ユーザーは結果セット全体をナビゲートできなくなります。著者が別のクエリを作成して合計数を取得し、それを呼び出したオンライン記事を見たことがあります。

何かのようなもの:

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

その値を DataPager に使用しました。しかし、明らかな理由から、結果をページングしたい場合に、すべてのクエリを別の呼び出しにコピー アンド ペーストする必要はありません。複数のクエリで再利用できる、これを行う簡単な方法はありますか?

ありがとう。

4

2 に答える 2

0

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

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

于 2009-06-11T22:35:23.853 に答える
0

linq は遅延クエリ実行を提供することを思い出してください...

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

int resultCount = qry.Count();

var results = qry.Skip(0).Take(10);
于 2009-09-09T13:12:28.587 に答える