金宏 和實(かねひろ かずみ)
富山県高岡市 株式会社イーザー
 北陸は本格的に寒くなってきました。健康のため,夜に近くのおとぎの森という公園を歩いていますが,鼻の頭が冷たくて痛くなります。その分,星はきれいにまたたいています。もう,年の暮れですね。年内に公開される原稿はこれで最後になると思います。みなさん,1年間,お読みいただきありがとうございました。来年もよろしくお願いします。

 VS2008の新機能というか,.NET Framework 3.5の新機能の目玉は「LINQ(Language Integrated Query)」です。LINQを使うと,異種データソースへのアクセスを同一な構文で記述できるようになります。LINQの構文はC#3.0とVisual Basic9.0のコードに統合(Integrated)されているので,C#やVBで文法チェックやデバッグができるだけでなく,インテリセンス機能も利用できます。

 これまでは,データソース毎にデータを取得する方法を勉強して,プログラミングすることが当たり前でした。例えば,リレーショナル・データベースにアクセスするには,SQL文を覚え,XMLドキュメントからデータを取得するにはXPathやXQuery式を理解する必要がありました。メモリー上のコレクションとADO.NETで作成したデータセットは性質的に似ているのですが,それでも,データを取得する文法は,やはりそれぞれ特徴があります。

 また,Visual BasicやVisual C#などのホスト言語にとって,SQL文は異質な構文を持つ別の言語です。ホスト言語のコンパイルのときにSQL文の間違いを指摘することはできません。間違いを指摘するためには,データベースがサポートするSQL文だけではなく,データ型や利用可能な関数までをホスト言語のほうで把握しておく必要があるからです。仮にそのようなことを実現しようとすると,ホスト言語は複数の言語をサポートしなければならないことになってしまい,現実的ではありません。

 LINQを使うと,これらの問題を解決できます。連載10回目の今回はLINQの概要をつかんだ後,Webアプリ開発にLINQをどう使うかを説明したいと思います。

異種データソースに同じコードでアクセス可能

 いったん,Webアプリ開発から離れて,LINQを使うと本当に様々なデータソースに同じようなコードでアクセスできるのかを確かめてみましょう。

 LINQでは図1のように,各種データソースに対応したLINQプロバイダが用意されています。

図1●各種データソースに対応するLINQプロバイダ
図1●各種データソースに対応するLINQプロバイダ
画面1●クラスビューの参照を開いたところ
画面1●クラスビューの参照を開いたところ
[画像のクリックで拡大表示]

 クラスビューの参照を開くとわかるようにLINQプロバイダはクラスです(画面1)。ですから,独自のLINQプロバイダを開発することも可能です。Links to LINQというページでは,LINQ to Amazon,LINQ to JSONやLINQ to Twitterといったプロバイダが紹介されています。AmazonやJavaScriptのデータ構造JSON,それから「つぶやき」を投稿し合うTwitterなどに同じようなプログラムコードでアクセスできると思うと,ワクワクしますね。

 でも,ここではオーソドックスに.NETコレクションにアクセスするLINQ to Objects,XMLドキュメントにアクセスするLINQ to XML,そしてSQL ServerにアクセスするLINQ to SQLを試してみます。