カテゴリ: C# 更新日: 2026/02/01

C#のLINQでSkip・Takeを使ったページング処理を学ぼう!初心者向けガイド

C#のLINQでSkip・Takeを使ったページング処理を学ぼう
C#のLINQでSkip・Takeを使ったページング処理を学ぼう

先生と生徒の会話形式で理解しよう

生徒

「C#で大量のデータを扱うとき、Webサイトの検索結果みたいに『1ページ目』『2ページ目』と分けて表示する方法はありますか?」

先生

「C#のLINQという機能にある『Skip』と『Take』を組み合わせると、簡単にページング処理ができますよ。」

生徒

「SkipとTake……。英語の意味通りだと『飛ばす』と『取る』ですよね。具体的にどうやって使うんですか?」

先生

「その通りです!それでは、データの山から必要な分だけを取り出す魔法のような使い方を見ていきましょう!」

1. ページング処理とは?身近な例で考えよう

1. ページング処理とは?身近な例で考えよう
1. ページング処理とは?身近な例で考えよう

プログラミングの世界でよく聞く「ページング(Paging)」とは、大量にあるデータを一定の数ごとに分割して表示する仕組みのことです。皆さんも普段、インターネットで検索をしたり、ショッピングサイトで商品を探したりするときに、画面の一番下に「1 2 3 4 5 次へ」といった数字のボタンを見たことがありませんか?

もし、1万件の商品データがあるサイトで、1ページに1万件すべてを表示しようとしたらどうなるでしょうか。画面がいつまでも読み込まれなかったり、スマートフォンの動作が重くなったりして、とても使いにくいですよね。そこで、「1ページには10件だけ出す」というルールを決めて、必要な部分だけを表示させるのがページングの役割です。

C#では、このページングをLINQ(リンク)という便利な道具を使って、驚くほど短いプログラムで書くことができます。今回はその中でも核となる「Skip」と「Take」の二つの命令について、パソコンを触ったことがない方でもわかるように解説していきます。

2. Skipメソッド:データを「読み飛ばす」

2. Skipメソッド:データを「読み飛ばす」
2. Skipメソッド:データを「読み飛ばす」

まずはSkip(スキップ)について学びましょう。音楽プレーヤーや縄跳びのスキップと同じで、「飛ばす」という意味です。データが並んでいる列の先頭から、指定した数だけデータを無視して、その次から数え始めるという命令です。

例えば、1番から10番までの番号札が並んでいるとします。ここで「3つスキップしてください」と言うと、1番、2番、3番は無視されて、4番から後ろのデータが対象になります。プログラミングでは、前のページですでに表示し終わったデータを飛ばすためにこの命令を使います。

使い方はとても簡単です。データの集まりに対して「.Skip(飛ばしたい数)」と書くだけです。

3. Takeメソッド:データを「取り出す」

3. Takeメソッド:データを「取り出す」
3. Takeメソッド:データを「取り出す」

次にTake(テイク)です。これは「手に取る」「取得する」という意味です。データの列の先頭から、指定した数だけを抜き出してきます。

例えば、1番から10番までの番号札があるときに「3つテイクしてください」と言うと、1番、2番、3番の札を手に入れることができます。もし列に2つしかデータがなければ、2つだけを取ってきてくれます。エラーになって止まることはないので安心してくださいね。

ページング処理では、1ページに表示したい件数(例えば10件や20件)を決めるために、このTakeメソッドを使用します。

4. SkipとTakeを組み合わせる魔法の方程式

4. SkipとTakeを組み合わせる魔法の方程式
4. SkipとTakeを組み合わせる魔法の方程式

ページングを完成させるには、この二つを「つなげて」使います。これがLINQの面白いところです。基本の形は次のようになります。

「(飛ばす数)だけ無視して、その後の(取得する数)だけ取る」

例えば、1ページに5件ずつ表示したい場合を考えてみましょう。

  • 1ページ目:1件も飛ばさずに(Skip 0)、5件取る(Take 5)
  • 2ページ目:最初の5件を飛ばして(Skip 5)、次の5件を取る(Take 5)
  • 3ページ目:最初の10件を飛ばして(Skip 10)、次の5件を取る(Take 5)

このように、表示したいページが後ろに行くほど、スキップする数を増やしていけばよいのです。数式っぽく書くと、「(ページ番号 - 1) × 1ページあたりの件数」をスキップすれば、目的のページを表示できますね。

5. 実際にプログラムを書いてみよう

5. 実際にプログラムを書いてみよう
5. 実際にプログラムを書いてみよう

それでは、C#のコードで具体的な動きを確認してみましょう。1から15までの数字が入ったリストを使って、2ページ目(1ページ5件設定)を取り出す例です。


using System;
using System.Collections.Generic;
using System.Linq; // LINQを使うために必要なおまじない

class Program
{
    static void Main()
    {
        // 1から15までの数字が入ったデータのリストを作ります
        List<int> numbers = Enumerable.Range(1, 15).ToList();

        int pageSize = 5;    // 1ページに表示する件数
        int pageNumber = 2;  // 見たいページ番号

        // ここがページングの魔法!
        // (2ページ目 - 1) * 5件 = 5件スキップして、5件取る
        var pageData = numbers.Skip((pageNumber - 1) * pageSize).Take(pageSize);

        Console.WriteLine($"{pageNumber}ページ目のデータを表示します:");
        foreach (var item in pageData)
        {
            Console.WriteLine(item);
        }
    }
}

このプログラムを実行すると、次のような結果になります。


2ページ目のデータを表示します:
6
7
8
9
10

最初の1番から5番までが「Skip」によって飛ばされ、その後の6番から10番までが「Take」によって取得されました。まさに、本をめくるようにデータを取り出せていますね!

6. なぜLINQを使うと良いの?

6. なぜLINQを使うと良いの?
6. なぜLINQを使うと良いの?

プログラミング未経験の方は、「わざわざこんな命令を使わなくても、手作業で数えればいいんじゃない?」と思うかもしれません。しかし、LINQを使うことには大きなメリットがあります。

まず、「プログラムが読みやすくなる」ことです。もしSkipやTakeを使わずに同じことをしようとすると、「ここからここまでを数えて、もしデータが足りなかったら……」という複雑な条件をたくさん書かなければなりません。LINQなら、やりたいことが英語の単語そのままなので、後から見たときに一目で何をしているか分かります。

次に、「安全である」ことです。例えば、データが3件しかないのに「10件取ってきて!」と命令しても、LINQはエラーを出さずに「ある分だけ(3件)」返してくれます。これを自分で計算して作ると、データの端っこを超えてアクセスしてしまい、プログラムが急に止まってしまう原因(バグ)になりやすいのです。

7. 注意点:並び替えを忘れずに

7. 注意点:並び替えを忘れずに
7. 注意点:並び替えを忘れずに

ページング処理を行うときに、とても大切なルールが一つだけあります。それは「データを並び替えてからSkip・Takeする」ということです。

想像してみてください。図書館の本棚がバラバラで、行くたびに本の場所が変わっていたら、2ページ目を見ようと思っても前回と違う本が出てきてしまいますよね。コンピュータの世界でも、データの並び順が保証されていないことがあります。

そのため、通常は OrderBy(昇順に並べる)や OrderByDescending(降順に並べる)という命令を、Skipの前に使います。これにより、常に正しい順番で「次へ」のページを表示できるようになります。

8. まとめ:SkipとTakeの役割

8. まとめ:SkipとTakeの役割
8. まとめ:SkipとTakeの役割

最後に、今回学んだ二つの大事な役割を復習しておきましょう。

命令 役割 イメージ
Skip(n) 先頭から n 個のデータを飛ばす 前のページをめくって捨てる
Take(n) 先頭から n 個のデータを取得する 今見たい分だけを切り取る

この二つを使いこなせるようになると、数万件、数百万件という膨大なデータを扱うアプリでも、ユーザーにとって使いやすい「サクサク動く画面」を作ることができるようになります。まずは、5件ずつ、10件ずつと数字を変えてみて、どのようにデータが変化するか試してみてくださいね。プログラミングの第一歩は、こうした小さな実験の積み重ねから始まります。

カテゴリの一覧へ
新着記事
New1
C#
C#の列挙型(enum)とは?定義方法と活用例を初心者向けに解説
New2
COBOL
COBOLの帳票をデジタル化!電子帳票化(PDF出力・外部ツール活用)への移行例
New3
C#
C#のデストラクタ(ファイナライザ)の使い方と注意点をやさしく解説!
New4
C#
C#のオーバーライド(override)の基本と使い方を解説
人気記事
No.1
Java&Spring記事人気No1
COBOL
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
No.2
Java&Spring記事人気No2
C#
C#のラムダ式の書き方と構文を初心者向けに完全解説
No.3
Java&Spring記事人気No3
C#
C#のLINQでOrderByを使った並び替えを完全ガイド!初心者でもわかるソート方法
No.4
Java&Spring記事人気No4
C#
C#で文字列が数値か判定する方法を解説!char.IsDigitやTryParseの基本
No.5
Java&Spring記事人気No5
C#
C#のrefとoutキーワードとは?引数の参照渡しを理解しよう
No.6
Java&Spring記事人気No6
C#
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.7
Java&Spring記事人気No7
C#
C#のプロパティとは?get/setアクセサの書き方と使い分け
No.8
Java&Spring記事人気No8
COBOL
COBOLのMOVE文を完全ガイド!初心者でもわかるデータ移送の基本