ScottGu's blog translated by Chica @ Wankuma

動的 LINQ (パート 1: LINQ 動的クエリライブラリの使用)

  

LINQ (言語統合クエリ)VS 2008 および.NET 3.5.で提供されている新しい機能の1つです。 LINQ は データの検索概念を.NET で第一級のプログラミング概念とし、選択されたプログラミング言語で効率的にクエリを表現することができるようになります。

LINQの利点の1つがVBおよびC#で型セーフなクエリが書けることです。つまり、コンパイル時でのLINQクエリのチェックや、コード上でのインテリセンスおよびリファクタリングサポートを完全に得ることができます。:

ほとんどの状況では、型セーフなクエリを書くことが大切ですが、状況に応じて動的にクエリを構築する柔軟性が必要な場合があります。例えば、アプリケーションにビジネス要因UIを提供して、エンドユーザであるアナリストが検索条件をドロップダウンを使用してカスタマイズし、それによるデータを確認できるする場合です。

一般的にはこれらの動的クエリを使用する時、動的なSQLクエリを構築するため文字列を連結させて対応します。これらをLINQを使用して対応する方法についてのご質問をいくつか最近頂きました。以下の投稿にLINQチームが提供している動的クエリライブラリを使用して動的にLINQクエリを構築する方法が書かれています。

LINQ 動的クエリライブラリのダウンロード

VS 2008 サンプルダウンロードページには、すばらしい動的クエリLINQヘルパーライブラリを含むVBおよびC#のサンプルパッケージへのポインタがあります。動的クエリライブラリ(とそれについてのドキュメント)への直接のポインタは以下をご参照ください。 :

VBおよびC#のDynamicQuery にはヘルパーライブラリのソース実装が含まれており、型セーフな言語演算子の代わりに文字列引数を取る拡張メソッドを使用してLINQクエリを表現することができます。プロジェクトにDynamicQuery ライブラリのC#またはVB実装のどちらかをコピー&ペーストして、エンドユーザの入力に応じてLINQクエリを動的に構築するのにより適した場所でそれを使用することができます。

簡単な動的クエリライブラリの例

DynamicQueryライブラリはどのLINQクエリプロバイダ(LINQ to SQL、LINQ to Objects、LINQ to XML、LINQ to Entities、LINQ to SharePointLINQ to TerraServerなどを含む)に対しても使用することができます。LINQクエリを構築するために言語演算子または型セーフなラムダ拡張メソッドを使用する代わりに、動的クエリライブラリはどんな文字列表現でも引き渡すことができる文字列ベースの拡張メソッドにを提供します。

例えば、以下は標準の型セーフな LINQ to SQL VB クエリで、Northwindデーベースからデータを取得し、ASP.NETのGridViewコントロールでそれを表示します。:

LINQ DynamicQuery ライブラリを使用して上記のクエリを次の様に書き換えることができます。:

 

条件のWhere節やソートのorderby節がコードでの表示に対して文字列表示を取っている様子をご確認ください。それらは遅延バインド文字列なため動的に構築することができます。例えば、アプリケーションにUIを提供して、エンドユーザであるアナリストがカスタマイズしたクエリ(任意の条件節を含む)を構築できるようにします。

動的クエリライブラリのドキュメント

上記のVBおよびC#の動的クエリサンプルには、いくつかHTMLのドキュメントが含まれており、より詳細に動的クエリライブラリの使用方法が記述されています。より深くこのヘルパーライブラリをご利用になる場合は是非ご覧頂いた方がいいと思います。:

 

動的クエリライブラリのサンプルをダウンロードおよび起動

LINQ to SQL を使用してNorthwindサンプルデータベースを検索するASP.NET Webサイトで動的LINQライブラリを使用するデモをVBおよびC#でサンプルを作成しましたので、ダウンロードして起動することができます。:

Visual Web Developer 2008 Express(フリー)または VS 2008のどちらででもご利用いただけます。

動的 LINQ クエリを構築する他のアプローチ

動的クエリライブラリの使用は非常に単純で簡単です。特に、Whereクエリを完全に動的にして、それをエンドユーザが構築できるUIを提供する場合には有用です。

今後のブログ投稿で、動的LINQクエリの構築についてさらに探究し、型セーフなプレディケイトメソッドでコードを構成するために使用するアプローチについてお話したいと思います。 (JosephとBen Albahari、C# 3.0 In a Nutshell bookという素晴らしい本の著者で、これについて既にいい投稿を ここでされています。)

Hope this helps,

Scott

ScottGu's blog translated by Chica @ Wankuma 

※本翻訳に関しまして、Scottさんにはご了承頂いております。