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

C#のLINQクエリ構文の書き方と基本操作をマスターしよう

C#のLINQクエリ構文の書き方と基本操作をマスターしよう
C#のLINQクエリ構文の書き方と基本操作をマスターしよう

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

生徒

「先生、C#で大量のデータの中から、特定の条件に合うものだけを取り出したり、並べ替えたりする簡単な方法はありますか?」

先生

「それなら『LINQ(リンク)』という機能がぴったりですよ。まるでデータベースに命令を出すように、直感的にデータを操作できるんです。」

生徒

「難しそうですね…。初心者でもすぐに使えるようになりますか?」

先生

「大丈夫です!書き方のパターンさえ覚えれば、驚くほどコードがスッキリします。さっそく、LINQの魔法を学んでいきましょう!」

1. LINQ(リンク)とは何か?

1. LINQ(リンク)とは何か?
1. LINQ(リンク)とは何か?

C#を学習していると、たくさんのデータ(リストや配列といいます)を扱う場面が必ず出てきます。例えば、「テストの点数一覧から80点以上の人だけを探す」とか「名前をアルファベット順に並べ替える」といった作業です。これらを普通の繰り返し処理(for文やforeach文)で書くと、コードが長くなってしまいがちです。

そこで登場するのがLINQ(Language Integrated Query:統合言語クエリ)です。LINQを使うと、データに対して「何をしてほしいか」を短い文章のような形式で書くことができます。パソコンをあまり触ったことがない方でも、料理のレシピを注文するようにプログラムを書けるとイメージすれば分かりやすいでしょう。

LINQには大きく分けて「クエリ構文」と「メソッド構文」の2つの書き方がありますが、今回はより英語の文章に近く、初心者の方にも意味が理解しやすいクエリ構文を中心に解説します。

2. LINQクエリ構文の基本形を覚えよう

2. LINQクエリ構文の基本形を覚えよう
2. LINQクエリ構文の基本形を覚えよう

クエリ構文は、まるで「どこそこの棚から、この条件に合うものを選んで、最後に渡して」と指示を出すような書き方をします。基本となるキーワードは3つです。

  • from:どのデータ(箱)から取り出すかを指定します。
  • where:どんな条件で絞り込むかを指定します。
  • select:最終的にどのデータを取り出すかを指定します。

まずは、簡単な数字のリストから「5より大きい数字」だけを取り出すプログラムを見てみましょう。


using System;
using System.Collections.Generic;
using System.Linq; // LINQを使うために必要です

class Program
{
    static void Main()
    {
        // 1. 元となるデータ(数字のリスト)を用意します
        List<int> numbers = new List<int> { 1, 3, 5, 7, 9 };

        // 2. LINQクエリ構文を使って、5より大きい数字を探します
        var query = from n in numbers
                    where n > 5
                    select n;

        // 3. 結果を表示します
        Console.WriteLine("5より大きい数字は:");
        foreach (var item in query)
        {
            Console.WriteLine(item);
        }
    }
}

実行結果は以下のようになります。


5より大きい数字は:
7
9

このコードの中で from n in numbers という部分があります。これは「numbersというリストの中にある一つ一つの数字を、とりあえず n と呼ぶことにするよ」という意味です。これを範囲変数と呼びます。そして where n > 5 で「 n が5より大きい場合だけ」と条件を付け、最後に select n でその n を結果として出力しています。

3. データを並べ替える「orderby」の使い方

3. データを並べ替える「orderby」の使い方
3. データを並べ替える「orderby」の使い方

次に、バラバラに並んでいるデータを順番通りに整列させる方法を学びましょう。これを並べ替え(ソート)と言います。LINQでは orderby というキーワードを使います。

例えば、名前のリストを五十音順(昇順)や、その逆(降順)に並べ替えることができます。デフォルト(標準)では小さい順になりますが、大きい順にしたいときは descending という言葉を後ろに付けます。


using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static void Main()
    {
        List<string> names = new List<string> { "さとう", "あべ", "たなか", "いとう" };

        // あいうえお順(昇順)に並べ替えます
        var sortedNames = from name in names
                          orderby name
                          select name;

        Console.WriteLine("並べ替え後の名前:");
        foreach (var n in sortedNames)
        {
            Console.WriteLine(n);
        }
    }
}

並べ替え後の名前:
あべ
いとう
さとう
たなか

このように、複雑な並べ替えも orderby 一つで解決します。もし逆順にしたい場合は orderby name descending と書くだけで済みます。プログラミング未経験の方でも、この英単語の意味を知っていれば、何をしているコードなのか予測がつくのがLINQの素晴らしい点です。

4. 複数の条件で絞り込む

4. 複数の条件で絞り込む
4. 複数の条件で絞り込む

現実のデータ操作では、条件が一つだけとは限りません。「10以上かつ、偶数(2で割り切れる数)のもの」といったように、複数の条件を組み合わせたいことがあります。その場合は、 where の中で && (かつ)や || (または)を使います。


using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static void Main()
    {
        List<int> scores = new List<int> { 45, 78, 90, 20, 66, 100 };

        // 60点以上、かつ100点満点ではない人を探す
        var result = from s in scores
                     where s >= 60 && s < 100
                     select s;

        Console.WriteLine("合格点かつ満点以外:");
        foreach (var s in result)
        {
            Console.WriteLine(s);
        }
    }
}

合格点かつ満点以外:
78
90
66

このように、 && を使うことで「条件Aと条件Bの両方を満たすもの」を簡単に抽出できます。これはExcelのフィルター機能を使っている感覚に非常に近いです。

5. データを加工して取り出す

5. データを加工して取り出す
5. データを加工して取り出す

最後に応用編として、 select を使ったデータの加工について解説します。これまでは select n のように、元のデータをそのまま取り出していましたが、実は取り出す瞬間にデータを加工することができます。

例えば、「名前のリストを取り出すときに、全員の名前に『様』を付ける」といった操作です。


using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static void Main()
    {
        List<string> fruits = new List<string> { "りんご", "みかん", "ばなな" };

        // 全ての名前に「おいしい」を付けて取り出す
        var deliciousFruits = from f in fruits
                              select "おいしい" + f;

        foreach (var item in deliciousFruits)
        {
            Console.WriteLine(item);
        }
    }
}

おいしいりんご
おいしいみかん
おいしいばなな

この「加工」ができるようになると、複雑なオブジェクト(例えば、会員番号・名前・住所が入った大きなデータ)から「名前だけを抜き出した新しいリスト」を作る、といったことが非常に簡単にできるようになります。データのクエリ(問い合わせ)を行う際に、必要な形に整えてから受け取ることができるため、その後のプログラムが非常に作りやすくなります。

6. LINQを使うメリット

6. LINQを使うメリット
6. LINQを使うメリット

なぜ世界中のプログラマーがLINQを愛用するのでしょうか?それは、「コードが読みやすくなるから」に尽きます。もしLINQを使わずに同じことをしようとすると、新しいリストを作成し、for文で一つずつ中身をチェックし、if文で判定し、条件に合えば新しいリストに Add (追加)する…という何行にもわたる処理を書かなければなりません。

しかし、LINQなら「何を探しているのか」がひと目で分かります。これは、将来自分が書いたコードを読み返したときや、他の人と一緒に開発をするときに、ミスを減らすための非常に重要なポイントとなります。また、LINQはリストだけでなく、配列、XML、データベースなど、様々な種類のデータに対して同じ書き方で使えるという魔法のような汎用性を持っています。

最初は fromselect といった書き方に戸惑うかもしれませんが、何度も書いているうちに、自然と手が動くようになります。まずは身近な数字や文字列のリストを使って、色々な条件でデータを抜き出す練習をしてみましょう。それが、効率的なC#プログラミングへの第一歩となります。

カテゴリの一覧へ
新着記事
New1
C#
C#のオブジェクト初期化子を完全ガイド!初心者でもわかる便利な使い方
New2
COBOL
COBOLの帳票出力と編集を完全マスター!条件付き表示で分かりやすい書類を作る方法
New3
COBOL
COBOLの帳票出力を完全攻略!数値項目のカンマ・小数点編集例を徹底解説
New4
C#
C#の配列とListの違いを比較して理解しよう
人気記事
No.1
Java&Spring記事人気No1
C#
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.2
Java&Spring記事人気No2
C#
C#でJSONファイルを読み書きする方法(JsonSerializer・Newtonsoft.Json)
No.3
Java&Spring記事人気No3
C#
C#のLINQクエリ構文の書き方と基本操作をマスターしよう
No.4
Java&Spring記事人気No4
COBOL
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
No.5
Java&Spring記事人気No5
C#
C#でswitch式を使う方法!C# 8.0以降の新機能を解説
No.6
Java&Spring記事人気No6
C#
C#のLINQ(リンク)とは?基本概念とデータ操作を初心者向けに徹底解説!
No.7
Java&Spring記事人気No7
C#
C#の非同期処理とUIスレッドをマスター!WPF/WinFormsでアプリが止まる問題を解決
No.8
Java&Spring記事人気No8
C#
C#のCancellationTokenを使ったキャンセル処理を完全ガイド!非同期処理を安全に止める方法