LINQ to DataSet の概要

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 を使用する場合と似ています。 LINQ のクエリは、DataSet の単一のテーブルに対して、または JoinGroupJoin などの標準クエリ演算子を使用して複数のテーブルに対して、実行することができます。

LINQ のクエリでは、DataSet の型指定されたオブジェクトと、型指定されていないオブジェクトの両方がサポートされています。 アプリケーションのデザイン時に DataSet のスキーマがわかっている場合は、型指定された DataSet を使用することをお勧めします。 型指定された DataSet のテーブルおよび行は、列ごとに型指定されたメンバーを持ちます。これにより、クエリが簡素化され、読みやすくなります。

System.Core.dll で実装されている標準クエリ演算子に加え、LINQ to DataSet では、一連の DataRow オブジェクトに対して容易にクエリを実行することのできる複数の DataSet 固有の拡張機能が追加されています。 これらの DataSet 固有の拡張機能には、DataRow の列値にアクセスするためのメソッドのほか、一連の行を比較するための演算子があります。

n 層アプリケーションと LINQ to DataSet

n 層データ アプリケーションは、複数の論理レイヤー (層) に分けられた、データ処理を中心とするアプリケーションです。 一般に、n 層アプリケーションには、プレゼンテーション層、中間層、およびデータ層が含まれます。 アプリケーション コンポーネントを別個の層に分離すると、アプリケーションの保守容易性とスケーラビリティが向上します。 n 層データ アプリケーションについて詳しくは、「n 層アプリケーションでのデータセットの操作」をご覧ください。

n 層アプリケーションでは、Web アプリケーションの情報をキャッシュするために DataSet が中間層で使用されます。 拡張メソッドによって実装される LINQ to DataSet のクエリ機能により、既存の ADO.NET 2.0 の DataSet が強化されています。

関連項目