LiveLinq は、メモリ内の XML(LINQ to XML XDocument クラスに格納)から直接データにクエリーを実行できます。XML インデックス(通常の LINQ to XML ではサポートされない)をサポートすることで、LINQ to XML のパフォーマンスが劇的に向上します。
LiveLinq to XML を使用するには、ソースファイルに次のコードを追加する必要があります。
C# |
コードのコピー
|
---|---|
using C1.LiveLinq.LiveViews.Xml;
|
次に、XML データの上にライブビューをいくつか作成する必要があります。ライブビューなしでデータにクエリーを実行できる LiveLinq to Objects や LiveLinq to DataSet とは異なり、LiveLinq to XML では、クエリーとライブビューが常に一緒に使用されます。ライブビューに適用する場合は、LiveLinq to XML バージョンの LINQ クエリー演算子を使用することになります。そうでない場合、それらは標準の非 LiveLinq クエリー演算子になります。ライブビューの作成を開始するには、拡張メソッド AsLive()|keyword=AsLive Method (XDocument) を XDocument に適用するだけです。
C# |
コードのコピー
|
---|---|
XDocument doc = … View<XDocument> docView = doc.AsLive(); |
ライブビューが作成されたら、使い慣れた(LINQ to XML)クエリー演算子 Elements、Descendants など(XmlExtensions クラス|keyword=XmlExtensions クラスを参照)やライブビューでサポートされる標準のクエリー演算子|tag=Query Operators Supported in Live Viewsを使用して、ライブビューを定義できます。たとえば、次のコードは、ドキュメント内の注文のコレクションを定義します。
C# |
コードのコピー
|
---|---|
View<XElement> orders = docView.Descendants("Orders");
|
このコレクションはライブです。つまり、プログラムによって変更される XDocument 内のデータに基づいて自動的に最新の状態に維持されます。その結果、ADO.NET DataTable、DataView などの任意の動的コレクションを使用する場合と同様に、このコレクション内のデータを使用できます。特に、別のセクションで示すように、データにインデックスを作成し、そのインデックスを使用して、クエリーやプログラムによる検索を高速化できます。これは、LiveLinq to XML により、パフォーマンスの低下なくメモリ内の XML データを使用できること、したがってカスタムコレクションクラスを作成したり、ADO.NET などの他のフレームワークを使用して XML データを操作する必要がなくなることを意味しています。LINQ to XML に LiveLinq を追加すれば十分です。
XML データに対していくつかのライブビューが定義できたので、クエリーを実行できます。たとえば、次のコードは、特定の顧客の注文をクエリーします。
C# |
コードのコピー
|
---|---|
var query = from Order in orders.AsIndexed() where (string)Order.IndexedAttribute("CustomerID") == "ALFKI" |
メモ: LiveLinq to XML でライブビューとクエリーを区別することは重要です。常にライブビューで開始するため、特に指定しない限り、デフォルトでクエリーはライブビューになります。上の例では、AsIndexed() を使用して、クエリーだけが必要であり、そのクエリーでライブビューを定義する必要がないことを指定しています。ライブビューはクエリー機能の拡張なので、クエリーの代わりに使用することもできます。ただし、ライブビューにはパフォーマンスのオーバーヘッドがあるため、単純なクエリーで十分な場合は、ライブビューの使用を避ける必要があります。原則として、ライブビューを作成し、それを一度使用して結果を取得しただけで破棄することは避けてください。ライブビューは、アクティブにしたまま(そのためライブと呼ばれます)、最新のデータを表示する目的で設計されています。