ライブビューは強力な機能です。したがって、少し時間をかけてさらにライブビューの機能についても見ていきます。ライブビューは、より強力なデータ連結を目的にして設計されています。実際、アプリケーション全体を(LiveLinq フォーム内の)LINQ とデータ連結だけで開発できると言ってもいいくらい強力です。
DataSource for Entity Framework のライブビュー機能を LiveLinq と呼びます。これは、クライアント側のインメモリ機能として、Entity Framework や RIA サービスのデータのみならず、XML(LINQ to XML オブジェクトモデル)、ADO.NET DataSet など、メモリ内の任意の監視可能なコレクションに適用できます。
たとえば、Entity Framework データと何か他のデータ(Web サービスから取得した XML など)に対してライブビューを使用して、それらのデータを統合し、統合されたデータに完全な機能を備えたデータ連結を簡単に提供できます。これは、さまざまなソースからデータを取得するアプリケーションを構築するための強力なツールです。ここでは、LiveLinq を Entity Framework で使用する方法を中心に説明します。詳細については、「C1LiveLinq」を参照してください。
実際には、「ビューのカスタマイズ」で、このようなカスタマイズの例について既に確認しました。しかし、そこでは、ビューのプロパティ(フィールド)を変更し、1つの LINQ 演算子 Select を適用しただけです。ここでは、さらに追加の LINQ 演算子を適用して、ビューを変更してみます。ここで行うことは、「ビューのカスタマイズ」の内容に似ていますが、C1DataSource を使用する代わりにすべてをコードで行います。
ライブビューを使用するには、次の手順に従います。
この例では、いくつかの LiveLinq 演算子(Where、OrderBy、Select)を適用しました。販売終了しておらず、単価が 30 以上の製品を含むビューを定義し、ビューを単価別にソートしました。
ここでは、ビューをプライベートフィールド _viewProducts に保存することにしました。
これは、後で必要になるというだけの理由です。必要にならないなら、ビューのローカル変数を使用してもかまいません。
構文的には、_viewProducts に対して記述したクエリーは単なる標準の LINQ です。これは、C1DataSource なしで、標準の LINQ to Objects を使用して行うこともできます。コードは同じですが、_scope.GetItems<Product>() の代わりに ObjectContext.Products などを使用します。実際、このプロジェクトを実行したら、標準の LINQ の結果と LiveLinq の結果を比較するために、この後すぐにこれを実行してみます。
この完全なデータ連結サポートを正しく評価するために、C1DataSource を使用せず、代わりに標準の LINQ to Objects を使用した場合の結果と比べてみます。比較は簡単です。コード内の _scope.GetItems<Product>() を Program.ObjectContext.Products に置き換えるだけです。また、ライブビューではなくなるため、タイプ C1.LiveLinq.LiveViews.View を削除し、代わりに 'var' キーワードを使用してコンパイルします。違いは明らかです。標準の LINQ では、グリッド内のデータは読み取り専用となり、グリッドはソートをサポートしません。
しかし、ライブビューは、これよりはるかに強力な機能を提供します。標準の LINQ to Objects では、LINQ ステートメントでカスタム Select を使用しないという厳しい条件の下であっても、一部の単純なプロパティの変更を除き、ソースデータの変更を反映できないスナップショットが生成されます。一方、ライブビューは、ソースデータの変更を自動的に反映する動的な "ライブ" ビューを提供します。このため、ほとんどの場合、コードでアプリケーションのさまざまな部分の変更を同期する必要はなく、ビューの "ライブ" 変更の自動化をデータ連結に任せることができるため、アプリケーション開発がシンプルになります。
これらのビューが本当に "ライブ" であることを確認するために、2つのフォームを横に並べて開いてみます。アプリケーションを実行し、「ビューのカスタマイズ」で作成した Custom Columns フォームと、ここで作成した Client Side Querying フォームを開きます。CustomColumns フォームで製品に変更を加え、もう一方のフォームにどのように反映されるかを確認します。たとえば、ある製品の UnitCost を 30 より大きくすると、それが自動的に2つめのフォームに表示されます。
別の例として、ライブビューが自動的に基底のデータと同期することを確認するために、次の手順に従います。
C# |
コードのコピー
|
---|---|
labelCount.DataBindings.Add(new Binding("Text", _viewProducts.LiveCount(), "Value")); |