今回は、C#の強力な機能であるLINQ(Language Integrated Query)を紹介します*1。LINQは、オブジェクトやデータベースなどのデータソースを操作するために利用します。

*1 日本語では「統合言語クエリー」と呼ばれています。

 データソースを操作するといえば、リレーショナルデータベース(RDB)に問い合わせを行うSQL(Structured Query Language)が有名です。SQL文を使えば、データベースに格納されているデータの中から条件に合ったデータを取得する、データを挿入・削除する——といった処理を実現できます。

 LINQもクエリーを行うために利用します。ですが、SQLのようにデータベースに特化したものではありません。LINQを使えば、データベースに限らず「様々なデータソースに対して問い合わせができる」のです。

 例えば、オブジェクトやXMLファイルなどのデータソースから条件に合ったデータを取得できます。もちろん、データベースに問い合わせてデータを取得することも可能です。しかも、データソースごとにC#コードを変更する必要はありません。各データソースへの問い合わせ方法は異なりますが、LINQ内部でこの差分を吸収してくれるのです(図1)。つまり、データベースへの問い合わせもXMLファイルへの問い合わせも同じ記法で実現できるのです。

図1●LINQの利用イメージ
図1●LINQの利用イメージ
[画像のクリックで拡大表示]

LINQの標準クエリー演算子

 早速、LINQを使ったプログラムを見てみましょう。Visual Studioを起動して、NSSample8というC#のコンソールアプリケーションのプロジェクトを作成します。そして、ソリューションエクスプローラーのProgram.csにリスト1のコードを記述します。LINQを使うには、(1)の「using System.Linq;」が必要なので忘れないようにしてください。

リスト1●LINQを使ってCountryの項目によって映画名を絞り込むプログラム。誌面の都合上、「{」の位置を変更している
リスト1●LINQを使ってCountryの項目によって映画名を絞り込むプログラム。誌面の都合上、「{」の位置を変更している
[画像のクリックで拡大表示]

 このコードは、前回紹介したコレクション(FilmクラスのListオブジェクト)のデータに対して、LINQを使った例です。映画名や監督、制作国や制作年をコレクションオブジェクトに格納して、そのオブジェクトからデータを取得してコンソール画面に表示するものです。ただし、前回よりも映画の項目を増やしています。

 このプログラムを実行すると、図2のような結果が表示されます。コレクションオブジェクトのFilmオブジェクトから日本映画とアメリカ映画で分類して取得し、それを制作年とともに表示します。

図2●リスト1の実行結果
図2●リスト1の実行結果
[画像のクリックで拡大表示]