ADO.NET EF と LINQ を介して提供されるページングのサポートはどのようなものですか?
「最初の 10」の選択はどのように見えますか?
「次の10」選択?
ADO.NET EF と LINQ を介して提供されるページングのサポートはどのようなものですか?
「最初の 10」の選択はどのように見えますか?
「次の10」選択?
他の人がここで説明したように、Take() と Skip() が必要です。
結果セットをチョップして、必要なページを取得します。
クエリの実行時にそれらを渡すことができるように、何らかの方法で PageIndex および PageSize 情報を維持する必要があります。たとえば、データ アクセスが Web サービスを介して行われる場合、フィルタリング基準と同時にインデックス/サイズを渡し、クライアント (アプリケーション、または Web サイトの場合はページ) でこれらの値を維持します。
それがあなたが探しているものである場合、すぐに使用できる「ページング用のステートフルイテレーター」はありません...
さらに、「標準のページング」構造を実装している場合は、クエリを制限する前にレコードの総数を取得する必要があります。これは、関数が PageSize と PageIndex をパラメータとして何らかの方法で取得すると仮定すると、そのようにすることができます。
var query = ...your normal query here...
int totalRecordCount = query.Count();
var pagedQuery = query.Skip(PageIndex*PageSize).Take(PageSize);
Take キーワードは、取得するレコード数を決定するために使用されます。Take キーワードの簡単な例を以下に示します。
顧客リスト = GetCustomerList();
var first3Customers = ( from c in customers select new {c.CustomerID, c.CustomerName} ) .Take(4);
ここでは、提供されたリストの最初の 4 人の顧客を取得しています。
where 句を使用して、最初にリストを絞り込んでから、そのうちの 4 つを取得することもできます。
var first3Customers = ( from c in customers where c.Region == "Kol" select new {c.CustomerID, c.CustomerName} ) .Take(4);
しかし、4 番目と 8 番目のレコードの間のデータを取得したい場合はどうでしょう。この場合、skip キーワードを使用して、必要のない数のレコード (先頭から) をスキップします。Skip キーワードの使用例を次に示します。
var first3Customers = ( from c in customers where c.Region == "Kol" select new {c.CustomerID, c.CustomerName} ) .Skip(3).Take(4);
詳細はこちら
Visual Studio で nuget を使用できる場合は、PagedList
パッケージを追加できます。
asp.netのこのリンクを見てください。