2010-08-31 2 views
0

Прежде всего, извините за плохое название, я могу только описать проблемуRIA Services и MVVM загрузки, вопрос о запросе данных (отделяющий данные)

Допустим, база данных на сервере есть таблицы/тип так называемые задачи , и эти задачи могут принадлежать пользователю и назначаться пользователю.

SomeTask.Owner = SomeUser 
SomeTask.Assignee = SomeOtherUser 

В сервере определены некоторые дополнительные запросы:

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

В ViewModel они могут быть загружены в качестве таковых:

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

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

Проблема здесь состоит в том, что оба результата загружаются в контекст, т. е. context.Tasks содержит объединение обоих результатов запроса

Моя первая мысль здесь была просто изменить поглотитель для свойств в моем 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); } 
} 

Однако, когда я связываю с видом на эти свойства, ничего не возвращается, а если я где использовать следующие , все загруженные записи возвращаются (очевидно):

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

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

Я предполагаю, что я собираюсь об этом полностью неправильно, , что это правильный способ справиться с ситуацией, как это?

Обновление: Или я должен просто справиться с этим, создав еще один экземпляр контекста?

Update: Кажется, я собирался на это неправильный путь ... Я все еще думает в терминах причислять запросов к базе данных ...

Все, что я должен сделать, чтобы решить мою проблему здесь загрузите Пользователь включая назначенные и принадлежащие задачи ...

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

сделает это сообщество вики, в случае, если кто-то другой делает то же самое.

ответ

0

вы имели в виду поставить Где (т => t.UserId = USERID) или Вы имели в виду:

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

т.е. вы использовали оператор присваивания вместо сравнения. (LINQ преобразует «==» в «=» в SQL за кулисами, но вы должны использовать операторы C#).

+0

Нет, это опечатка ... извините: p – TimothyP

+0

Все нормально. В. Где указана переменная «userId», используемая в выражениях Linq? –