今回は、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を利用すると、配列やリストはもちろん、さまざまなデータソースを対象に直感的かつ統一的なコードを書けます。
フィルタリングや並べ替え、グルーピングなど、多彩な操作を簡潔に記述できる点が大きな利点です。
ただし、遅延実行やデータソースごとの違いなどを踏まえたうえで、適切な実装を行うことが大切です。