書籍転載:ASP.NET MVC 5 実践プログラミング
LINQ:特定範囲のデータだけを取得する - Skip/Takeメソッド[C#]
指定された件数だけデータを読み飛ばすためのSkipメソッドと、指定された件数のデータだけを取得するためのTakeメソッドについて解説。書籍転載の23本目(基礎編「5-3-6」)。
書籍転載について
本コーナーは、秀和システム発行の書籍『ASP.NET MVC 5 実践プログラミング』の中から、特にBuild Insiderの読者に有用だと考えられる項目を編集部が選び、同社の許可を得て転載したものです。
『ASP.NET MVC 5 実践プログラミング』の詳細や購入は秀和システムのサイトや目次ページをご覧ください。
ご注意
本記事は、書籍の内容を改変することなく、そのまま転載したものです。このため用字用語の統一ルールなどはBuild Insiderのそれとは一致しません。あらかじめご了承ください。
5-3-6 特定範囲のデータだけを取得する - Skip/Takeメソッド
Skipメソッドは指定された件数だけデータを読み飛ばし、Takeメソッドは指定された件数のデータだけを取得します*30。Skip/Takeメソッドを利用することで、m~n件目のデータを抜き出すといった操作が可能になります。
以下が具体的な例です。
- *30 対応するクエリー式構文はありません。
public ActionResult Skip()
{
var articles = (from a in db.Articles
orderby a.Published descending
select a).Skip(4).Take(3);
return View(articles);
}
|
「5~7件目を取得」=「5件目から最大3件を取得」というわけです。Skip/Takeメソッドを利用する際には、データの並び順が決まっていないと意味がありませんので、orderby句との併用は実質必須です。
Skip/Takeメソッドを利用することで、ページング処理も実装できます。たとえば以下は、3件単位でグリッド表をページングする例です。「http://localhost:83/Linq/Paging/2」のようにすることで、対応するページを表示します*31。
- *31 本来であれば、前後するページへのリンク(ページャー)も作成しなければなりませんが、ここでは簡単化のために割愛しています。
public ActionResult Paging(int? id)
{
var pageSize = 3; // ページあたりの表示件数
var pageNum = (id ?? 1) - 1; // ページ番号
// 現在のページ(id)で表示すべきデータを取得
var articles = (from a in db.Articles
orderby a.Published descending
select a).Skip(pageSize * pageNum).Take(pageSize);
return View(articles);
}
|
- *32 対応するビュースクリプトPaging.cshtmlは、配布サンプルを参照してください。
現在のページ数(変数pageNum
)はルートパラメーター経由で引数id
から取得します。id
が無指定の場合はデフォルト値を0
とします。あとは、ページサイズ(pageSize
)と現在のページ数との積を求めることで、データの取得開始位置(Skipメソッドの引数)を求めることができます。
※以下では、本稿の前後を合わせて5回分(第21回~第25回)のみ表示しています。
連載の全タイトルを参照するには、[この記事の連載 INDEX]を参照してください。
21. LINQ:取得列を明示的に指定する - select句/SelectManyメソッド[C#]
範囲変数(エンティティ)から特定のプロパティだけを取り出したり、プロパティ値を加工したりするためのselect句/Selectメソッドについて解説。書籍転載の21本目(基礎編「5-3-4」)。
22. LINQ:重複のないデータを取得する - Distinctメソッド[C#]
クエリ後の結果セットから重複したデータを除去するためのDistinctメソッドについて解説する。書籍転載の22本目(基礎編「5-3-5」)。
23. 【現在、表示中】≫ LINQ:特定範囲のデータだけを取得する - Skip/Takeメソッド[C#]
指定された件数だけデータを読み飛ばすためのSkipメソッドと、指定された件数のデータだけを取得するためのTakeメソッドについて解説。書籍転載の23本目(基礎編「5-3-6」)。
24. LINQ:先頭のデータを取得する - Firstメソッド[C#]
クエリ後の結果セットから先頭のデータを取得するためのFirstメソッドについて解説する。書籍転載の24本目(基礎編「5-3-7」)。
25. LINQ:データをグループ化する - group句[C#]
特定のキー列でデータをグループ化するためのgroup句/GroupByメソッドについて解説する。書籍転載の25本目(基礎編「5-3-8」)。