DataSource for Entity Framework for WinForms
組み込みのコレクションクラス IndexedCollection の使用(LiveLinq to Objects)
C1LiveLinq > LiveLinq の使用方法 > LiveLinq でコレクションをクエリーする方法 > 組み込みのコレクションクラス IndexedCollection の使用(LiveLinq to Objects)

最初に、オブジェクトに対してどのようなコレクションを使用するかは気にしないとします。次のような Customer クラスがあります

C#
コードのコピー
public class Customer
{
    public string Name { get; set; }
    public string City { get; set; }
}
また、LiveLinq を使用して必要なコレクションクラスを提供します。

これで、LiveLinq から提供され、LiveLinq の使用に対して特に最適化された C1.LiveLinq.Collections.IndexedCollection クラス以外を考慮する必要はなくなります。

C#
コードのコピー
var customers = new IndexedCollection<Customer>();
customers.Add(cust1);
customers.Add(cust2);
...
var query =
  from c in customers where c.City == "London" select c;
 customers.AsIndexed() ではなく単に customers を使用できることに注意してください。その理由は、IndexedCollection<T> クラスには LiveLinq が必要とする IIndexedSource<T> インタフェースが既に実装されており、AsIndexed() 拡張メソッドを使用してこのインタフェースにラップする必要がないためです。

上の Customer などの独自のクラスをコレクションの要素に使用する場合は、考慮するべき重要な事項があります。上の Customer は基本的なクラスで、プロパティ通知をサポートしていません。コードでプロパティを設定した場合は、コレクションに対して作成されたインデックスやライブビューを含めて、何もその変更を認識できません。したがって、このようなクラスでは、プロパティ変更通知を必ず提供する必要があります。プロパティ変更通知は、さまざまな理由で推奨される標準の .NET 機能ですが、LiveLinq もまたその理由を加えます。INotifyPropertyChanged インタフェースを実装することで、独自のクラスでプロパティ変更通知をサポートできます。または、次のように IndexableObject クラスからクラスを派生させ、OnPropertyChanging/OnPropertyChanged を呼び出すことで、LiveLinq を使用して通知をサポートできます。

C#
コードのコピー
public class Customer : IndexableObject
{
    private string _name;
    public string Name
    {
        get {return _name} ;
        set
        {
            OnPropertyChanging("Name");
            _name = value;
            OnPropertyChanged("Name");
        }
    }
    private string _city;
    public string City
    {
        get {return _city};
        set
        {
            OnPropertyChanging("City");
            _city = value;
            OnPropertyChanged("City");
        }
    }
}