Deep Insider の Tutor コーナー
>>  Deep Insider は本サイトからスピンオフした姉妹サイトです。よろしく! 
書籍転載:ASP.NET MVC 5 実践プログラミング

書籍転載:ASP.NET MVC 5 実践プログラミング

LINQ:特定範囲のデータだけを取得する - Skip/Takeメソッド[C#]

2014年12月2日

指定された件数だけデータを読み飛ばすための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 対応するクエリー式構文はありません。
C#
public ActionResult Skip()
{
  var articles = (from a in db.Articles
                  orderby a.Published descending
                  select a).Skip(4).Take(3);

  return View(articles);
}
リスト5-44 Controllers/LinqController.cs
図5-17 5~7件目のデータを取得

図5-17 5~7件目のデータを取得

 「5~7件目を取得」=「5件目から最大3件を取得」というわけです。Skip/Takeメソッドを利用する際には、データの並び順が決まっていないと意味がありませんので、orderby句との併用は実質必須です。

 Skip/Takeメソッドを利用することで、ページング処理も実装できます。たとえば以下は、3件単位でグリッド表をページングする例です。「http://localhost:83/Linq/Paging/2」のようにすることで、対応するページを表示します*31

  • *31 本来であれば、前後するページへのリンク(ページャー)も作成しなければなりませんが、ここでは簡単化のために割愛しています。
C#
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);
}
リスト5-45 Controllers/LinqController.cs *32
図5-18 「http://localhost:83/Linq/Paging」(上)/「~/Linq/Paging/2」(下)でアクセスした場合
  • *32 対応するビュースクリプトPaging.cshtmlは、配布サンプルを参照してください。

 現在のページ数(変数pageNum)はルートパラメーター経由で引数idから取得します。idが無指定の場合はデフォルト値を0とします。あとは、ページサイズ(pageSize)と現在のページ数との積を求めることで、データの取得開始位置(Skipメソッドの引数)を求めることができます。

※以下では、本稿の前後を合わせて5回分(第21回~第25回)のみ表示しています。
 連載の全タイトルを参照するには、[この記事の連載 INDEX]を参照してください。

書籍転載:ASP.NET MVC 5 実践プログラミング
21. LINQ:取得列を明示的に指定する - select句/SelectManyメソッド[C#]

範囲変数(エンティティ)から特定のプロパティだけを取り出したり、プロパティ値を加工したりするためのselect句/Selectメソッドについて解説。書籍転載の21本目(基礎編「5-3-4」)。

書籍転載:ASP.NET MVC 5 実践プログラミング
22. LINQ:重複のないデータを取得する - Distinctメソッド[C#]

クエリ後の結果セットから重複したデータを除去するためのDistinctメソッドについて解説する。書籍転載の22本目(基礎編「5-3-5」)。

書籍転載:ASP.NET MVC 5 実践プログラミング
23. 【現在、表示中】≫ LINQ:特定範囲のデータだけを取得する - Skip/Takeメソッド[C#]

指定された件数だけデータを読み飛ばすためのSkipメソッドと、指定された件数のデータだけを取得するためのTakeメソッドについて解説。書籍転載の23本目(基礎編「5-3-6」)。

書籍転載:ASP.NET MVC 5 実践プログラミング
24. LINQ:先頭のデータを取得する - Firstメソッド[C#]

クエリ後の結果セットから先頭のデータを取得するためのFirstメソッドについて解説する。書籍転載の24本目(基礎編「5-3-7」)。

書籍転載:ASP.NET MVC 5 実践プログラミング
25. LINQ:データをグループ化する - group句[C#]

特定のキー列でデータをグループ化するためのgroup句/GroupByメソッドについて解説する。書籍転載の25本目(基礎編「5-3-8」)。

サイトからのお知らせ

Twitterでつぶやこう!