C# 入門:LINQ を使ってコレクション操作をスマートに
コレクション操作をスマートに「ループ+if」からの卒業! データ操作をもっと簡単・直感的に
目次
はじめに
C# で配列や List<T> を操作するとき、次のようなコードを書いた経験はありませんか?
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
List<int> even = new List<int>();
foreach (var n in numbers)
{
if (n % 2 == 0)
{
even.Add(n);
}
}
このような処理を、1行で、もっと直感的に書けるようにするのが LINQ(Language Integrated Query) です。
LINQ とは?
LINQ(リンク)は、C# に組み込まれた データ操作のための文法 です。
- 配列やリストからの「抽出」「並び替え」「集計」などを、簡潔に記述できます。
- SQL に似た表現も可能なので、データベースを扱う前の練習にも最適です。
基本構文(メソッド構文)
var 結果 = コレクション.Where(条件).Select(取り出す形);
例:偶数だけを抽出する
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main()
{
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
var even = numbers.Where(n => n % 2 == 0);
foreach (var n in even)
{
Console.WriteLine(n);
}
}
}
実行結果:
2
4
主な LINQ メソッド一覧(よく使うもの)
メソッド名 | 説明 | 使用例 |
---|---|---|
Where | 条件で絞り込み | .Where(x => x > 10) |
Select | 要素の形を変換(マッピング) | .Select(x => x * 2) |
OrderBy | 昇順ソート | .OrderBy(x => x) |
OrderByDescending | 降順ソート | .OrderByDescending(x => x) |
FirstOrDefault | 最初の要素を取得(なければ null または default) | .FirstOrDefault() |
Any | 条件に一致する要素があるか? | .Any(x => x == 0) |
Count | 要素数(条件付きでも可) | .Count(x => x > 5) |
ToList | 結果を List に変換 | .Where(…).ToList() |
例:文字列リストから特定の文字を含むものを抽出
List<string> names = new List<string> { "佐藤", "鈴木", "田中", "高橋" };
var filtered = names.Where(n => n.Contains("田"));
foreach (var name in filtered)
{
Console.WriteLine(name);
}
実行結果:
田中
応用例:Select を使って名前に「さん」をつける
var politeNames = names.Select(n => n + "さん");
foreach (var name in politeNames)
{
Console.WriteLine(name);
}
enum + LINQ:状態ごとのフィルターにも使える
enum State { Idle, Active, Finished }
class Task
{
public string Title { get; set; }
public State Status { get; set; }
}
List<Task> tasks = new List<Task>
{
new Task { Title = "書類作成", Status = State.Active },
new Task { Title = "掃除", Status = State.Finished },
new Task { Title = "資料読み", Status = State.Active }
};
var activeTasks = tasks.Where(t => t.Status == State.Active);
foreach (var task in activeTasks)
{
Console.WriteLine(task.Title);
}
実行結果:
書類作成
資料読み
LINQ のメリット
項目 | 内容 |
---|---|
コードが短い | foreach や if をまとめて1行で書ける |
可読性が高い | 「何をしているか」が一目でわかる |
安全性 | 要素数ゼロでも例外を出さずに処理できる |
連結可能 | メソッドチェーンで複雑な処理も段階的に記述 |
注意点
- Where() などの操作は「遅延評価」される → 実際に foreach などで使うまで実行されない
- ToList() を付けるとすぐにリスト化できる(遅延評価しない)
練習問題
Q1. 次の整数リストから 3 の倍数だけを抽出して、降順で表示せよ
List<int> numbers = new List<int> { 1, 3, 6, 7, 9, 10, 12 };
var result = numbers
.Where(n => n % 3 == 0)
.OrderByDescending(n => n);
foreach (var n in result)
{
Console.WriteLine(n);
}
実行結果:
12
9
6
3
おわりに
LINQ は「データをどう扱うか」を 簡潔・直感的に書くための必須スキル です。
List と組み合わせて使えば、複雑な処理でもシンプルに書けます。
初学者のうちは、まずは Where()、Select()、OrderBy() だけでも使いこなせるようになると、コーディングの幅が大きく広がります。
補足:使うには using が必要
using System.Linq;
を忘れずに!
訪問数 1 回, 今日の訪問数 1回
ディスカッション
コメント一覧
まだ、コメントがありません