今回は、C#の強力な機能であるLINQ(Language Integrated Query)を紹介します*1。LINQは、オブジェクトやデータベースなどのデータソースを操作するために利用します。
データソースを操作するといえば、リレーショナルデータベース(RDB)に問い合わせを行うSQL(Structured Query Language)が有名です。SQL文を使えば、データベースに格納されているデータの中から条件に合ったデータを取得する、データを挿入・削除する——といった処理を実現できます。
LINQもクエリーを行うために利用します。ですが、SQLのようにデータベースに特化したものではありません。LINQを使えば、データベースに限らず「様々なデータソースに対して問い合わせができる」のです。
例えば、オブジェクトやXMLファイルなどのデータソースから条件に合ったデータを取得できます。もちろん、データベースに問い合わせてデータを取得することも可能です。しかも、データソースごとにC#コードを変更する必要はありません。各データソースへの問い合わせ方法は異なりますが、LINQ内部でこの差分を吸収してくれるのです(図1)。つまり、データベースへの問い合わせもXMLファイルへの問い合わせも同じ記法で実現できるのです。
LINQの標準クエリー演算子
早速、LINQを使ったプログラムを見てみましょう。Visual Studioを起動して、NSSample8というC#のコンソールアプリケーションのプロジェクトを作成します。そして、ソリューションエクスプローラーのProgram.csにリスト1のコードを記述します。LINQを使うには、(1)の「using System.Linq;」が必要なので忘れないようにしてください。
このコードは、前回紹介したコレクション(FilmクラスのListオブジェクト)のデータに対して、LINQを使った例です。映画名や監督、制作国や制作年をコレクションオブジェクトに格納して、そのオブジェクトからデータを取得してコンソール画面に表示するものです。ただし、前回よりも映画の項目を増やしています。
このプログラムを実行すると、図2のような結果が表示されます。コレクションオブジェクトのFilmオブジェクトから日本映画とアメリカ映画で分類して取得し、それを制作年とともに表示します。