単純なクエリーを考えてみます。
C# |
コードのコピー
|
---|---|
from a in A where a.p == 1 select a |
標準の LINQ では、このクエリーの結果はスナップショットです。結果のコレクションは、クエリーの実行時に形成され、それ以降は変更されません。オブジェクトの1つが変更され、条件を満足しなくなっても、そのオブジェクトは結果のコレクションから削除されません。また、A 内のオブジェクトが変更され、条件を満足するようになっても、そのオブジェクトは結果のコレクションに追加されません。このような単純なクエリーの結果でさえ、ライブではなく、動的ではありません。基本コレクション A が変化したときに自動的に変化せず、ベースデータと自動的に同期されません。
LiveLinq では、このクエリーに基づいてビューを作成すると、それはライブで動的になります。ベースデータが変化したときに自動的に変化し、ベースデータと自動的に同期されます。
このクエリーからビューを作成するために必要な作業は、拡張メソッド .AsLive() を使用することだけです。
C# |
コードのコピー
|
---|---|
var view = from a in A.AsLive() where a.p == 1 select a; |
AsLive() 拡張メソッドは、AsIndexed()/ToIndexed() に似ており、AsIndexed()/ToIndexed() 拡張メソッドを使用できる場所ならどこでも使用できます。したがって、ライブビューは、LiveLinq to Objects、LiveLinq to XML、LiveLinq to DataSet のすべてのケースでサポートされます(サポートされるクエリー演算子には多少の制限があります。「ライブビューでサポートされるクエリー演算子」を参照)。AsIndexed()/ToIndexed() と AsLive() の違いは、AsLive() がビューを作成することです。したがって、AsLive() の場合は、LiveLinq を使用して、クエリーからビューにデータを挿入することも、初期データを挿入した後のビューを管理することもできます。AsIndexed()/ToIndexed() 拡張メソッドは、その前半部分だけを実行し、LiveLinq によるクエリーが有効になります。
上の例は、1つの簡単な Where 条件を示す非常に単純なクエリーです。たとえば、ADO.NET の DataView または WPF の CollectionView など、ほかにも同様のことを実行できるツールがあります。LiveLinq の威力は、結合を含む大部分の LINQ 演算子をサポートすることにあります。したがって、単純な条件だけでなく、事実上、必要なすべてのクエリーに基づいてライブビューを作成できます。