その他

[C#] LINQ(統合言語クエリ)の使い方

今回は、C#のLINQ(統合言語クエリ)の使い方についてご紹介します。

C#におけるLINQは、配列やリストなどのオブジェクトコレクションだけでなく、XMLやデータベースに対しても統一的なクエリを記述できる機能です。

さまざまなデータソースを対象に、フィルタリングや並べ替え、集計などを手早く行えることが大きな特徴です。

ここでは、基本的な構文やよく使うメソッドの例を交えながら、C#のLINQを活用するポイントをご紹介します。

LINQとは?

LINQ(Language Integrated Query)は、.NET言語に統合されたクエリ言語です。

SQLライクな構文(クエリ構文)とメソッドチェーンを利用する構文(メソッド構文)の2種類が存在し、それぞれ好みに応じて使い分けが可能です。

配列やリストはもちろん、LINQ to SQLやLINQ to Entitiesのようにデータベースアクセスにも応用されており、コードの可読性型安全性を向上させます。

基本的な使い方

LINQには大きく分けてクエリ構文メソッド構文の2つの書き方があります。

クエリ構文はSQL文に似た見た目で、以下のように記述できます。

実行結果

2
4
6

一方、メソッド構文は拡張メソッドを使い、メソッドチェーンの形で書きます。

同じ結果を得る処理でも、以下のように記述することが可能です。

実行結果

2
4
6

実用的な使用例

実際のプログラムでは、フィルタリングや並べ替え、グループ化など、さまざまな場面でLINQが活躍します。

ここでは2つの例をご紹介します。

WhereとSelectの活用

特定の条件を満たす要素のみを抽出しつつ、別の形式に変換する方法です。

実行結果

High Score: 80
High Score: 100
High Score: 90

このように、Whereメソッドで条件に合致する要素だけを抽出し、Selectでフォーマットを変更しています。

GroupByでのグルーピング

同じキーを持つデータをまとめて処理する例です。

例えば、従業員データを部門ごとに集約し、部門名と従業員の名前を出力するケースを考えます。

実行結果

Department: Sales
Alice
Bob
Department: HR
Charlie
Diana
Department: IT
Edward

このように、GroupByを使うことでキーに応じたグループを作成でき、まとめて表示や集計が行えます。

LINQを利用する際の注意点

LINQを使いこなすうえでは、以下のような点に注意する必要があります。

  • 遅延実行:クエリの定義時点では実行されず、列挙(foreachなど)やToList()で明示的に評価するタイミングまで処理が行われません。結果を早期に確定したい場合はToList()やToArray()を使います。
  • パフォーマンス:複雑なクエリや大量のデータソースに対しては、処理時間やメモリ消費に注意が必要です。必要に応じてクエリ分割やキャッシュを検討します。
  • 対象データソースの違い:LINQ to Objects、LINQ to SQL、LINQ to Entitiesなど、接続先によってサポートされる機能や動作が異なります。
  • 例外処理:クエリが実行されるタイミングでエラーが起こる可能性もあるため、例外処理の実装を適切に行う必要があります。

まとめ

LINQを利用すると、配列やリストはもちろん、さまざまなデータソースを対象に直感的かつ統一的なコードを書けます。

フィルタリングや並べ替え、グルーピングなど、多彩な操作を簡潔に記述できる点が大きな利点です。

ただし、遅延実行やデータソースごとの違いなどを踏まえたうえで、適切な実装を行うことが大切です。