DataSource for Entity Framework for WinForms
XML データの使用(LiveLinq to XML)
C1LiveLinq > LiveLinq の使用方法 > LiveLinq でコレクションをクエリーする方法 > XML データの使用(LiveLinq to XML)

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()XDocument に適用するだけです。

C#
コードのコピー
XDocument doc = …
View<XDocument> docView = doc.AsLive();

 ライブビューを作成したので、使い慣れた(LINQ to XML)ElementsDescendants などのクエリー演算子(XmlExtensions Class を参照)やライブビューでサポートされる標準のクエリー演算子を使用して、ライブビューを定義できます。次に例を示します。

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() を使用して、クエリーだけが必要であり、そのクエリーでライブビューを定義する必要がないことを指定しています。ライブビューはクエリー機能の拡張なので、クエリーの代わりに使用することもできます。ただし、ライブビューにはパフォーマンスのオーバーヘッドがあるため、単純なクエリーで十分な場合は、ライブビューの使用を避ける必要があります。原則として、ライブビューを作成し、それを一度使用して結果を取得しただけで破棄することは避けてください。ライブビューは、アクティブにしたまま(そのためライブと呼ばれます)、最新のデータを表示する目的で設計されています。