カテゴリ: C# 更新日: 2025/12/04

C#のLINQクエリ構文の基本と応用を学ぼう

C#のLINQクエリ構文の基本と応用を学ぼう
C#のLINQクエリ構文の基本と応用を学ぼう

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

生徒

「先生、C#でデータを簡単に検索したり並べ替えたりできる方法はありますか?」

先生

「はい、それにはLINQ(リンク)という仕組みを使います。SQLのような書き方でデータを操作できる便利な機能です。」

生徒

「SQLってデータベースのクエリですよね?C#でも同じような書き方ができるんですか?」

先生

「その通りです。LINQのクエリ構文を使えば、配列やリストなどのコレクションに対してもデータベースのように検索や並べ替えができます。」

生徒

「なるほど!それならとても便利そうですね。どうやって使うんですか?」

先生

「では、基本から応用まで順番に見ていきましょう!」

1. LINQクエリ構文とは?

1. LINQクエリ構文とは?
1. LINQクエリ構文とは?

C#のLINQ(Language Integrated Query)は、データを操作するための統一的な書き方を提供する仕組みです。通常、データを検索したり並べ替えたりするにはループや条件分岐を使う必要がありますが、LINQを使うとより直感的でわかりやすい形で処理ができます。

特にクエリ構文はSQLに似た書き方をするため、データベースの知識がある人には馴染みやすく、初めて学ぶ人にも「質問を投げかけるように」書けるので理解しやすいのが特徴です。

2. LINQクエリ構文の基本的な書き方

2. LINQクエリ構文の基本的な書き方
2. LINQクエリ構文の基本的な書き方

LINQのクエリ構文は「どのデータから取り出すか」「どんな条件で選ぶか」「どのように並べるか」を組み合わせて書きます。基本の形は次のようになります。


var result = from 変数 in コレクション
             where 条件
             orderby 並べ替え条件
             select 変数;

これを日本語にすると「コレクションの中から条件に合うものを取り出して、並べ替えて、結果を選ぶ」という意味になります。

3. 実際のサンプルコード

3. 実際のサンプルコード
3. 実際のサンプルコード

例えば、整数のリストから偶数だけを取り出して、小さい順に並べるプログラムは以下のように書けます。


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

class Program
{
    static void Main()
    {
        List<int> numbers = new List<int> { 5, 8, 1, 3, 10, 2, 7 };

        var evenNumbers = from n in numbers
                          where n % 2 == 0
                          orderby n
                          select n;

        foreach (var num in evenNumbers)
        {
            Console.WriteLine(num);
        }
    }
}

このコードを実行すると、以下のような結果が表示されます。


2
8
10

このようにLINQクエリ構文を使えば、複雑な処理を簡単に表現できます。

4. LINQクエリ構文の応用例

4. LINQクエリ構文の応用例
4. LINQクエリ構文の応用例

LINQは単純な検索や並べ替えだけでなく、条件の組み合わせやグループ化なども簡単に実現できます。

4-1. 複数条件での検索


var result = from n in numbers
             where n > 3 && n < 10
             select n;

この例では、3より大きく10未満の数字だけを取り出します。

4-2. 文字列データの操作

文字列のリストから特定の文字で始まるものを取り出すこともできます。


List<string> names = new List<string> { "Alice", "Bob", "Charlie", "Anna" };

var result = from name in names
             where name.StartsWith("A")
             orderby name
             select name;

この場合、結果は「Alice」と「Anna」になります。

4-3. グループ化

LINQを使うとデータをグループに分けることも可能です。例えば、文字列の長さごとに分類する場合は次のように書けます。


var groups = from name in names
             group name by name.Length into g
             select new { Length = g.Key, Items = g };

この結果、同じ文字数の名前がまとめて扱えるようになります。

5. LINQクエリ構文を使うメリット

5. LINQクエリ構文を使うメリット
5. LINQクエリ構文を使うメリット

LINQを使うメリットはいくつかあります。

  • コードが短くシンプルになる
  • SQLに似た直感的な書き方ができる
  • 条件の追加や変更がしやすい
  • 配列・リスト・データベースなど異なるデータでも同じ書き方で扱える

特にC#初心者にとっては「for文やif文を組み合わせて書くよりも、自然な文章のように書ける」点が大きな魅力です。

まとめ

まとめ
まとめ

ここまで学んできたLINQクエリ構文は、C#でデータを扱う場面においてとても重要な役割を果たします。配列やリスト、文字列の集合など、さまざまなデータに対して統一された書き方で検索や並べ替えができるため、複雑な処理をすっきりと表現できます。とくにSQLに似た構文は、初めて触れる場合でも読みやすく、頭の中で自然に処理の流れを思い描ける点が大きな特徴です。

また、LINQクエリ構文は単なる検索だけでなく、複数条件の組み合わせ、文字列の抽出、グループ化など、多くのデータ操作に対応しています。たとえば「数字のなかから一定範囲だけ取り出したい」「特定の文字で始まる名前だけを抽出したい」「同じ長さの名前ごとに集計したい」など、日常的に発生する処理を簡潔に記述できます。こうした柔軟な記述ができることで、実務の中でも非常に役立つ技術になります。

さらに、LINQは条件の変更や追加がしやすく、コードの見通しを保ちながら必要な加工を後から付け足せる点も魅力です。例えば、最初は「偶数だけを取り出す」だけだった処理に、「並べ替える」「さらに三の倍数を除く」などの条件を簡単に追加できます。これは従来のfor文やif文では複雑になりがちな部分であり、LINQを使うことで読みやすさも保ちながら拡張できます。

また、LINQのクエリ構文はデータベース操作にも通じる考え方のため、今後SQLやデータベースに触れる場面でも役に立ちます。プログラミング初心者にとって重要なのは、まず「データをどう扱うか」という基本的な考えを身につけることです。その基礎を支えてくれるのがLINQの直感的な書き方であり、学ぶ価値の高い機能だといえます。

最後に、今回学んだ内容を整理しながらLINQの特徴を活かしたサンプルプログラムを掲載します。改めて書き方を確認することで、応用への理解がさらに深まります。

まとめとしてのサンプルプログラム

下記は複数のLINQクエリ構文を組み合わせた応用的なサンプルです。数字と文字列を扱い、それぞれの検索・並べ替え・グループ化の流れを確認できます。


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

class SummaryProgram
{
    static void Main()
    {
        List<int> numbers = new List<int> { 12, 3, 18, 7, 2, 25, 8 };

        // 十より大きい偶数だけを抽出
        var filtered = from n in numbers
                       where n > 10 && n % 2 == 0
                       orderby n
                       select n;

        List<string> names = new List<string> { "Sato", "Aki", "Taro", "Akane", "Mio", "Anna" };

        // Aではじまる名前を抽出し並べ替え
        var aNames = from name in names
                     where name.StartsWith("A")
                     orderby name
                     select name;

        // 名前を文字数ごとにグループ化
        var grouped = from name in names
                      group name by name.Length into g
                      select new { Length = g.Key, Items = g };

        Console.WriteLine("十より大きい偶数:");
        foreach (var item in filtered)
        {
            Console.WriteLine(item);
        }

        Console.WriteLine("Aではじまる名前:");
        foreach (var item in aNames)
        {
            Console.WriteLine(item);
        }

        Console.WriteLine("文字数でグループ化:");
        foreach (var group in grouped)
        {
            Console.WriteLine("文字数: " + group.Length);
            foreach (var nm in group.Items)
            {
                Console.WriteLine(nm);
            }
        }
    }
}
先生と生徒の振り返り会話

生徒

「先生、LINQクエリ構文って本当に便利ですね。複雑な処理も短く書けるのがうれしいです!」

先生

「そうですね。特に検索や並べ替えの処理はLINQの得意分野なので、積極的に使うとコードがすっきりしますよ。」

生徒

「文字列の抽出やグループ化も簡単だったので驚きました。SQLに似ていて読みやすかったです。」

先生

「その感覚はとても大事です。LINQを学ぶことでデータ操作の基礎が強くなり、他の言語や技術にも応用できます。」

生徒

「もっと複雑な検索や組み合わせにも挑戦して、LINQを使いこなせるようになりたいです!」

先生

「その意欲があれば大丈夫ですよ。これからも一緒に応用的な書き方を学んでいきましょう。」

カテゴリの一覧へ
新着記事
New1
C#
C#のメモリ管理とガーベジコレクションの基礎を理解しよう
New2
C#
C#の参照型と値型の違いを初心者向けにやさしく解説!
New3
C#
C#のクエリ式とメソッド式の書き換え方を完全ガイド!LINQの2つの書き方をマスター
New4
C#
C#の戻り値にタプルを使う方法!複数の値を返すテクニック
人気記事
No.1
Java&Spring記事人気No1
C#
C#で文字列が数値か判定する方法を解説!char.IsDigitやTryParseの基本
No.2
Java&Spring記事人気No2
C#
C#のLINQでOrderByを使った並び替えを完全ガイド!初心者でもわかるソート方法
No.3
Java&Spring記事人気No3
C#
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.4
Java&Spring記事人気No4
C#
C#のrefとoutキーワードとは?引数の参照渡しを理解しよう
No.5
Java&Spring記事人気No5
COBOL
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
No.6
Java&Spring記事人気No6
C#
C#の引数と戻り値の基本!値を受け渡し・返す仕組みを理解しよう
No.7
Java&Spring記事人気No7
C#
C#のラムダ式の書き方と構文を初心者向けに完全解説
No.8
Java&Spring記事人気No8
C#
C#で型を調べる方法!GetType()・typeof演算子の違いと使い方