2009-06-18 7 views
1

J'ai un problème avec Linq et ObservableCollections dans mon application WPF.Linq et ObservableCollection

Contexte du problème:

J'ai créé une base de données SQL très simple avec deux tables: l'utilisateur et BankAccounts. La table utilisateur a une relation un-à-plusieurs avec la table BankAccounts. Ensuite, j'ai créé des dataclasses Linq-to-SQL, ce qui a bien fonctionné ==> l'assosiation entre les deux tables a également été détectée.

Ensuite, j'ai créé une fonction pour récupérer tous les utilisateurs qui fonctionne très bien:

DataClassesDataContext dc = new DataClassesDataContext 

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

Supposons maintenant que je veux ajouter un nouveau BankAccount à chaque utilisateur (peu probable mais quand même). je pourrais ajouter le code suivant

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

Les travaux surtout bien. La propriété BankAccounts fait automatiquement partie de la classe User, en raison de l'association de la base de données et de Linq DataClasses.

Cependant, dans mon application, j'ajoute d'abord les résultats de la requête à une ObservableCollection. Par la présente, je pourrais utiliser toutes sortes de liaison de données et changenotification. Ceci est accompli par le code suivant;

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

Problème: Dans le ObservableCollection je ne peux pas anyting avec la propriété des utilisateurs, car il est maintenant de type EntitySet <>. Donc, je ne peux plus faire la déclaration suivante.

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

D'une certaine façon, quand queryresults sont ajoutés à une ObservableCollection Il est impossible de les propriétés acces user.BankAccounts plus. Toutefois, il est possible de lier la propriété BankAccounts à n'importe quel contrôle, comme une zone de liste, et il contient les données correctes.

Est-ce que quelqu'un maintenant comment je peux créer une observableCollction (ou une collection similaire) à partir de laquelle je peux accéder à ces propriétés "assosiées"? Je suis vraiment impatient de trouver une solution.

Merci d'avance! Meilleures salutations,

Bas Zweeris E: [email protected]

Répondre

2

mailez de la query originale qui mettra en œuvre IQueryable, vous pouvez exécuter d'autres questions dont vous avez besoin contre cela. Le ObservableCollection devrait juste être pour que WPF ait quelque chose à lier - c'est très utile si vous voulez ajouter un nouvel élément de collection mais pas le pousser dans la base de données avant que l'utilisateur ait eu la chance de le modifier.

par ex.

// 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); 
Questions connexes