2010-08-31 6 views
0

Tout d'abord, désolé pour le mauvais titre, je ne peux décrire le problèmeRIA Services et MVVM chargement, une question sur les données interrogation (séparation des données)

Disons que la base de données sur le serveur dispose d'une table/type Tâches appelées et ces tâches peuvent appartenir à un utilisateur et être attribuées à un utilisateur.

SomeTask.Owner = SomeUser 
SomeTask.Assignee = SomeOtherUser 

Dans le serveur des requêtes supplémentaires sont définis:

public IQueryable<Task> GetAssignedTasks(int UserId) { /* gets the assigned tasks */ }; 
public IQueryable<Task> GetOwnedTasks(int UserId) { /* gets the owned tasks */ }; 

Dans le ViewModel ceux-ci pourraient être chargés en tant que tel:

var ownedTasksQuery = context.GetOwnedTasksQuery(userId); 
context.Load(ownedTasksQuery); 

var assignedTasksQuery = context.GetAssignedTasksQuery(userId); 
context.Load(assignedTasksQuery); 

Le problème ici est que les résultats se chargés dans le contexte, ie, context.Tasks contient l'union des deux résultats de requête

Ma première pensée ici est de changer simplement le getter pour les propriétés dans mon ViewModel:

public IEnumerable<Task> OwnedTasks 
{ 
    get { return context.Tasks.Where(t => t.UserId == userId); }  
} 

public IEnumerable<Task> AssignedTasks 
{ 
    get { return context.Tasks.Where(t => t.UserId == userId); } 
} 

Cependant, quand je lie la vue de ces propriétés, rien est retourné, alors que si je où utiliser les éléments suivants, tous les enregistrements chargés sont renvoyés (évidemment):

public IEnumerable<Task> OwnedTasks 
{ 
    get { return context.Tasks; }  
} 

public IEnumerable<Task> AssignedTasks 
{ 
    get { return context.Tasks; } 
} 

Je devine que je vais sur ce tout à fait dans le mauvais sens, quelle est la bonne façon de gérer une telle situation?

Mise à jour: Ou devrais-je simplement gérer cela en créant une autre instance du contexte?

Mise à jour: Il semble que j'allais à ce dans le mauvais sens ... Je pense toujours en termes de requêtes de base de données ... Classing

Tout ce que je dois faire pour résoudre mon problème est ici le chargement utilisateur, y compris les tâches assignées et appartenant à ...

ObjectContext.Users.Include("OwnedTasks").Include("AssignedTasks") 

Fera ce wiki communautaire, au cas où quelqu'un d'autre fait la même chose.

Répondre

0

Vouliez-vous dire mettre Où (t => t.UserId = userId) ou avez-vous dire:

Where(t => t.UserId == userId); 

dire vous avez utilisé un opérateur d'affectation au lieu de comparer. (LINQ convertit "==" en "=" dans SQL derrière les scènes, mais vous devez utiliser les opérateurs C#).

+0

Non c'est une faute de frappe ... désolé: p – TimothyP

+0

C'est ok. Q. Où est définie la variable "userId", utilisée dans les expressions Linq? –

Questions connexes