DataSource for Entity Framework for WinForms
サーバー側のフィルタビュー
プログラミングガイド > コードでの ClientView の使用 > サーバー側のフィルタビュー

クライアントビューにフィルタ処理を適用するには、ClientView から派生した FilteredView クラスを返す AsFiltered メソッドを使用します。

C#
コードのコピー
FilteredView<Product> productsByCategory = products.AsFiltered(p => p.CategoryID == categoryID);

ここで categoryID は、コード内の他の場所で値を割り当てられた変数またはパラメータです。たとえば、1 などの特定の値の categoryID でこのビューを作成すると、p.CategoryID = 1 の製品が取得されます。可能な場合は、サーバーにアクセスすることなく、キャッシュを使用してこの処理が実行されます。そうでない場合は、必要なエンティティがサーバーからフェッチされます(クライアントビューのキャッシュ対応機能)。標準の EF(または RIA)クエリーとは異なり、クライアント上で追加され、サーバーにはまだ存在しないエンティティや、クライアント上で変更されてフィルタ条件を満足するようになったエンティティも対象になります(クライアントビューのライブ機能)。

標準の EF(または RIA)クエリーとは異なり、このビューは、最初に使用された後も最新の状態を維持します(ライブ)。クライアント上でデータを変更し、条件を満足するエンティティが増えた(または減った)場合は、変更後のデータを反映するためにビューが自動的に更新されます。ビューに連結された GUI コントロールがある場合は、それらも更新されます。

キーセレクタ機能付きの AsFiltered メソッドを使用すると

C#
コードのコピー
FilteredView<Product> productsByCategory = products.AsFilteredBound(p => p.CategoryID);

毎回新しいビューを作成せずに、フィルタ条件を設定/変更できます。

C#
コードのコピー
productsByCategory.FilterKey = categoryID;

ビューのフィルタキーをオブジェクトのプロパティ(またはプロパティパス)に連結することができる便利なメソッド BindFilterKey もあります。

C#
コードのコピー
FilteredView<Product> productsByCategory = products.AsFilteredBound(p => p.CategoryID)
.BindFilterKey(comboBox1, "SelectedValue")