DataSource for Entity Framework for WinForms
基本の LiveLinq 連結
C1LiveLinq > LiveLinq の開始 > 基本の LiveLinq 連結

LiveLinq により、通常のクエリーが高速化されることに加えて、データ連結シナリオで LINQ を使用できるようになります。

これを示すために、簡単な例を使用します。

  1. 新しい WinForms プロジェクトを作成します
  2. C1.LiveLinq.dll アセンブリへの参照を追加します
  3. ボタンと DataGridView をメインフォームに追加します
  4. ボタンをダブルクリックし、次のコードをフォームに追加します。
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 クエリーと通常のクエリーとの相違点は以下のとおりです。

  1. オブジェクトコレクションの型は IndexedCollection<T> です。これは LiveLinq から提供され、必要な変更通知をサポートするクラスです。
  2. Contact クラスは LiveLinqIndexedObject クラスから派生されており、プロパティが設定されたときの変更通知を提供することができます。
  3. クエリー自体に AsLive 呼び出しが含まれています。この呼び出しは、結果をアクティブなままにしておくことと、連結コントロールによって処理される変更通知を発行することを LiveLinq に指示します。

フィルタ条件がアクティブなままになっているかどうかをテストするには、グリッドを編集して、"Ringo" を "Ricky" に変更します。編集を終了すると、その行がすぐにフィルタ処理されて非表示になります。

また、AsLive 呼び出しの効果を確認するには、それをコメントアウトしてから、サンプルを再度実行します。今回は、リストに項目を追加しても、グリッドが通知を受け取らないため、グリッドは空のままになります。