さまざまな状況で、データベースから提供されるテーブルやビューに直接対応していないカスタムビューを使用したいことがあります。LINQ は、このような状況に最適なツールです。柔軟、簡潔、かつ効率的なクエリーステートメントと任意の言語を使用して、生データを変換できます。C1DataSource では、LINQ クエリーステートメントを動的に実行できるので、LINQ がさらに強力になります。このため、C1DataSource による LINQ 実装は LiveLinq と呼ばれます。LiveLinq の機能については、「ライブビュー」で説明します。ここでは、完全な更新可能性と連結可能性を損なうことなく、LINQ 演算子を使用して自由にビューを変更し、形成できるということだけを伝えておきます。
さっそく、LINQ 演算子の1つである Select("プロジェクション" とも呼ばれます)を使用して、ビューのフィールド(プロパティ)をカスタマイズしてみます。
ビューをカスタマイズするには、次の手順に従います。
ここで、c1DataSource1["Products"] は1つの ClientCollectionView オブジェクトです。これは、デザイナで設定したビューソースによって作成されるビューです。コードでビューソース自体にアクセスする必要がある場合は、c1DataSource.ViewSources["Products"] としてアクセスすることもできます。AsLive() 拡張メソッド呼び出しは、ビューの項目タイプ(Product)を指定するために必要です。これにより、この項目に LiveLinq 演算子を適用できます。c1DataSource1["Products"].AsLive<Product>() の結果は1つの View<Product> です。C1.LiveLinq.LiveViews.View は、クライアント側ライブビューで使用される LiveLinq のメインクラスです。ライブビューに適用される LINQ 演算子は、ライブビューの更新可能性と連結可能性を維持します。これらは、通常と同じ LINQ 演算子ですが、ライブビューに適用されることで、データ連結アプリケーションに極めて重要な追加機能を提供します。
連結可能性は、ビューが常に "ライブ" であり、静的データの単純なスナップショットではないことによって実現されます。これを証明するため、先ほどビルドしたフォームの正確な複製を構築します。この段階では、作成したフォームに簡単にアクセスできるように、アプリケーションにメニューを追加することも簡単でしょう。アプリケーションを保存、ビルド、および実行します。今回は、作成した2つのフォームインスタンスを開き、一方のフォームのグリッドでデータを変更します。もう一方のフォームのグリッドで、対応するデータが自動的に変更されることに注目してください。これらのフォームのグリッドに対して、行った変更を同期するためのコードを1行も記述していないことを思い出してください。
「ライブビュー」では、その他の LiveLinq の機能について確認します。