LiveLinq により、通常のクエリーが高速化されることに加えて、データ連結シナリオで LINQ を使用できるようになります。
これを示すために、簡単な例を使用します。
C# |
コードのコピー
|
---|---|
using C1.LiveLinq; using C1.LiveLinq.AdoNet; using C1.LiveLinq.LiveViews; using C1.LiveLinq.Collections; private void button1_Click(object sender, EventArgs e) { // データソースを作成します var contacts = new IndexedCollection<Contact>(); // リストをグリッドに連結します(要素を追加する前に) this.dataGridView1.DataSource = from c in contacts.AsLive() where c.Name.Contains("g") select c; // コレクションに要素を追加します(連結した後に) var names = "Paul,Ringo,John,George,Robert,Jimmy,John Paul,Bonzo"; foreach (string s in names.Split(',')) { contacts.Add(new Contact() { Name = s }); } } public class Contact : IndexableObject { private string _name; public string Name { get { return _name; } set { OnPropertyChanging("Name"); _name = value; OnPropertyChanged("Name"); } } |
プロジェクトを実行してボタンをクリックすると、グリッドに "Ringo" と "George" という2つの名前が表示されます。
データソースは、文字 "g" を含む名前をすべて返すクエリーなので、この結果に驚く点はありません。
興味深いのは、クエリーがグリッドの C1DataSource プロパティに割り当てられた後に、すべての連絡先がリストに追加されたという点です。これは、LiveLinq クエリーが本当にライブリストを返したことを示しています。つまり、(a)要素が追加されたことをグリッドに通知し、(b)where 演算子を正しく使用して "g" を含む名前だけを表示しています。
この LiveLinq クエリーと通常のクエリーとの相違点は以下のとおりです。
フィルタ条件がアクティブなままになっているかどうかをテストするには、グリッドを編集して、"Ringo" を "Ricky" に変更します。編集を終了すると、その行がすぐにフィルタ処理されて非表示になります。
また、AsLive 呼び出しの効果を確認するには、それをコメントアウトしてから、サンプルを再度実行します。今回は、リストに項目を追加しても、グリッドが通知を受け取らないため、グリッドは空のままになります。