2009-11-14 11 views
5

linqについて質問があります。私は、スキップを使用してページングを行うために取るよ:linqページング - 合計行を取得

(from l in db.ProductList 
      select l).Skip((page - 1) * row_per_page).Take(row_per_page) 

それは働く、と私は最大のページを計算する製品リストの合計行を取得する必要があります。私は行をカウントするために別のクエリを使用する必要がありますが、上記の1つのクエリでこれを行う別の方法があると思いますか?

答えて

4

var count = (from l in db.ProductList select l).Count(); 
+1

または:var count = db.ProductList.Count() –

+0

これはこれを行い、呼び出し回数であるため、この情報がインデックスに保持されるため、データページをメモリにプルする必要はありませんテーブルには少なくとも1つあります)。つまり、このクエリは非常に高速で、単一のレコードを返すよりもはるかに高速です。 – naspinski

0

.Count()拡張メソッドを使用して、行数を取得するには、行の合計数の両方を取得する方法との「スキップ/取る」サブセットはありません同じクエリ内のそれらの行

2つのクエリでこれが必要な理由はありますか?

1

最終行は、合計ページ番号を取得するためにすべての項目を列挙する必要があります。しかし、あなたは一度だけそれらを列挙したいと思います。IEnumerable> "ページ"を取得するGroupByメソッドを試すことをお勧めします。次に、pages.Count()を使用してページ数を取得できます。または、ページを列挙してアイテムの各ページを取得することもできます。 GroupByクエリは一度だけ実行されます。

関連する問題