LINQ to DataSet の概要
更新 : November 2007
DataSet は、ADO.NET のコンポーネントの中でもきわめて使用頻度の高いコンポーネントの 1 つです。ADO.NET の基礎を成す非接続型プログラミング モデルの重要な要素であり、さまざまなデータ ソースからのデータを明示的にキャッシュできます。プレゼンテーション層では、DataSet とデータ バインドの GUI コントロールとが密接に連携します。中間層では、リレーショナル形式のデータを維持するキャッシュとして機能し、単純で高速なクエリと、階層的なナビゲーション サービスを提供します。データベースに対する要求数を削減するための基本的な手法は、DataSet を使用し、データを中間層でキャッシュすることです。たとえば、データ ドリブンの ASP.NET Web アプリケーションでは、ほとんど変更されないアプリケーション データがかなりの割合で存在し、しかも、複数のセッションまたは複数のユーザー間で共通して使用されているケースがよくあります。このデータを Web サーバー上のメモリに維持しておくことで、データベースに対する要求数を減らし、高速な対話処理をユーザーに提供できます。DataSet が備えるもう 1 つの特長は、アプリケーションが、1 つまたは複数のデータ ソースから取得したデータのサブセットをアプリケーション空間に取り込むことができる点です。アプリケーションは、そのデータをリレーショナル形式を維持したままインメモリで操作できます。
こうした突出した特長がある反面、DataSet のクエリ機能には制限があります。Select メソッドでデータのフィルタ処理や並べ替えを行ったり、GetChildRows メソッドや GetParentRow メソッドを使って階層のナビゲーションを行うことはできます。しかし、さらに複雑な処理を行うには、開発者が独自にクエリを作成する必要があります。その結果、アプリケーションで期待したパフォーマンスが得られなかったり、メンテナンスが難しくなったりする可能性があります。
LINQ to DataSet は、DataSet オブジェクトにキャッシュされたデータに対するクエリをより簡単に、より高速にします。これらのクエリはアプリケーション コードに文字列リテラルとして記述するのではなく、プログラミング言語そのもので表現できます。つまり、開発者はクエリ言語を個別に習得する必要はありません。LINQ to DataSet の利点はそれだけではありません。Visual Studio IDE で LINQ に対するコンパイル時の構文チェック、静的な型指定、IntelliSense などの機能が利用できるため、Visual Studio 開発者の生産性も向上します。また、LINQ to DataSet を使用すると、1 つまたは複数のデータ ソースから取得して統合したデータを照会することもできます。これにより、データの表現方法や扱いに柔軟性が要求されるさまざまなシナリオが実現します。特に、汎用のレポート作成、分析、ビジネス インテリジェンスを行うアプリケーションでは、この手法を用いたデータ操作が欠かせません。
LINQ to DataSet を使った DataSet のクエリ
LINQ to DataSet を使用して DataSet オブジェクトを照会するには、あらかじめ DataSet にデータを読み込んでおく必要があります。DataSet へのデータの読み込みは、DataAdapter クラスまたは LINQ to SQL を使用するなど、複数の方法で行うことができます。DataSet オブジェクトへのデータの読み込みが完了すると、そのデータセットに対してクエリを実行できるようになります。LINQ to DataSet を使ったクエリの作成方法は、他の LINQ 対応データ ソースに対して 統合言語クエリ (LINQ: Language-Integrated Query) を使用する方法と似ています。LINQ のクエリは、DataSet の単一テーブルに対して実行できるほか、Join や GroupJoin などの標準クエリ演算子を使って複数のテーブルに対して実行することができます。
LINQ のクエリは、DataSet の型指定されたオブジェクトと、型指定されていないオブジェクトの両方をサポートしています。アプリケーションのデザイン時に DataSet のスキーマがわかっている場合は、型指定された DataSet を使用することをお勧めします。型指定された DataSet のテーブルおよび行は、列ごとに型指定されたメンバを持ちます。これにより、クエリが簡素化され、読みやすくなります。
LINQ to DataSet には、System.Core.dll に実装された標準クエリ演算子に加え、一連の DataRow オブジェクトに対して容易にクエリを実行することのできる複数の DataSet 固有の拡張機能が追加されています。これらの DataSet 固有の拡張機能には、DataRow の列値にアクセスするためのメソッドのほか、一連の行を比較するための演算子があります。
n 層アプリケーションと LINQ to DataSet
n 層データ アプリケーションは、複数の論理レイヤ (層) に分けられた、データ処理を中心とするアプリケーションです。一般に、n 層アプリケーションには、プレゼンテーション層、中間層、およびデータ層が含まれます。アプリケーション コンポーネントを別個の層に分けることで、アプリケーションの保守性とスケーラビリティが向上します。n 層データ アプリケーションの詳細については、「n 層データ アプリケーション」を参照してください。
n 層アプリケーションでは、Web アプリケーションの情報をキャッシュするために DataSet が中間層で使用されます。拡張メソッドを通じて実装される LINQ to DataSet のクエリ機能により、既存の ADO.NET 2.0 の DataSet が強化されています。
次の図は、LINQ to DataSet と DataSet の関係、および n 層アプリケーションでの位置付けを表しています。
参照
概念
DataSet のクエリ (LINQ to DataSet)