2009-06-18 14 views
1

私はWPFアプリケーションでLinqとObservableCollectionsに問題があります。問題のLinqとObservableCollection

コンテキスト:ユーザーとBankAccounts:

私は2つのテーブルを持つ非常に単純なSQLデータベースを作成しました。 ユーザーテーブルには、BankAccountsテーブルと1対多の関係があります。次に、Linq-to-SQLデータ・グラフを作成しました。これはうまくいきました==> 2つのテーブル間のアソシエーションも検出されました。

次の私が正常に動作し、すべてのユーザーを盗んする関数を作成しました:

DataClassesDataContext dc = new DataClassesDataContext 

var query = from u in dc.Users 
      select u; 

は今、私は、各ユーザ(まだ非常にそうではなく)に新しい銀行口座のを追加するとします。 私はすべて正常に動作します上記の次のコード

for each(User u in query) 
{ 
    u.BankAccounts.Add(New BankAccount()); 
} 

を追加することができます。 BankAccountsプロパティは、自動的にUserクラスの一部です。これは、データベースとLinq DataClassesのアソシエーションのためです。

しかし、私のアプリケーションでは、最初にクエリ結果をObservableCollectionに追加します。これにより、私はあらゆる種類のデータバインディングと変更を使用することができました。これは次のコードによって実現されます。

ObservableCollection<User> oUsers = new ObservableCollection<User>(query); 

問題:のObservableCollectionの中で、私はそれがタイプで、今のEntitySet <であるため、ユーザーBankAccountsプロパティを持つanytingを行う>ことはできません。だから私はもうこれ以上のことはできない。 queryresultsがのObservableCollectionに追加されたときに

for each(User u in oUsers) 
{ 
    u.BankAccounts.Add(New BankAccount()); 
} 

はどういうわけか、もうuser.BankAccountsのプロパティをアクセスもすることはできません。ただし、リストボックスのようなコントロールにBankAccountsプロパティをバインドすることは可能で、正しいデータが含まれています。

誰かが私がobservableCollction(または同様のコレクション)をどのように作成して、これらの "assosiated"プロパティにアクセスできるかを今誰かが知っていますか?私は本当に解決策を楽しみにしています。

ありがとうございます! 敬具、

バZweeris E:[email protected]

答えて

2

のIQueryableを実装するその元queryを追跡するには、あなたがそれに対して必要な任意の更なるクエリを実行することができます。

ObservableCollectionは、WPFにバインドするものでなければなりません。新しいコレクションアイテムを追加したいが、ユーザーが編集する前にデータベースにプッシュしたくない場合は非常に便利です。

例えば、

// Create a new blank client type 
var ct = new ClientType() 
{ 
    IsArchived = false, 
    Description = "<new client type>", 
    Code = "CT000", 
    CanLoginOnline = true 
}; 

// Tell the data source to keep track of this object 
db.ClientTypes.InsertOnSubmit(ct); 

// Also add the object to the observable collection so that it can immediately be shown in the UI and editted without hitting the db 
clienttypes.Add(ct); 
関連する問題