C# の LINQ とは何か

LINQ(Language Integrated Query)は、C# に統合されたクエリ機能だ。配列やリスト、データベース、XML など様々なデータソースに対して、統一された構文で問い合わせができる。

なぜ LINQ が必要なのか

LINQ 登場以前、データの操作方法はデータソースごとにバラバラだった。配列には for ループ、データベースには SQL、XML には XPath といった具合に、それぞれ異なる知識が必要だった。

LINQ 以前

データソースごとに異なる操作方法を覚える必要があった。コードの書き方も統一されず、可読性が低かった。

LINQ 以後

どのデータソースでも同じ構文で操作できる。型安全で、コンパイル時にエラーを検出できる。

LINQ を使えば、データの絞り込み、並べ替え、変換、集計といった操作を、直感的な構文で記述できる。

基本的な例

数値の配列から偶数だけを取り出す処理を見てみよう。

int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

// LINQ で偶数だけを抽出
var evenNumbers = numbers.Where(n => n % 2 == 0);

foreach (var n in evenNumbers)
{
    Console.WriteLine(n);  // 2, 4, 6, 8, 10
}

Where メソッドに条件を渡すだけで、該当する要素だけを取り出せる。従来の for ループと比べると、コードが簡潔で意図が明確になる。

LINQ の主要な名前空間

LINQ を使うには System.Linq 名前空間を using する必要がある。

using System.Linq;

この名前空間には、配列や List<T> などの IEnumerable<T> を実装したコレクションに対する拡張メソッドが定義されている。WhereSelectOrderBy といったメソッドはすべてここに含まれる。

LINQ の種類

LINQ にはいくつかの種類がある。

LINQ to Objects

メモリ上のコレクション(配列、List など)に対するクエリ。最も基本的な LINQ で、本ロールで主に扱う。

LINQ to SQL / Entity Framework

データベースに対するクエリ。C# のコードが SQL に変換されて実行される。

LINQ to XML

XML ドキュメントに対するクエリ。XPath の代わりに使える。

どの種類でも基本的な構文は同じだ。一度 LINQ を覚えれば、様々なデータソースに応用できる。これが LINQ の大きな強みである。