RIA服务和MVVM加载,关于查询数据的问题(分离数据)

时间:2010-08-31 13:49:12

标签: silverlight data-binding wcf-ria-services

首先,抱歉标题不好,我只能描述问题

假设服务器上的数据库有一个名为Tasks的表/类型 这些任务可以由用户拥有并分配给用户。

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中属性的getter:

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; }
}

我猜我完全错误地走了这条路, 处理这种情况的正确方法是什么?

更新:或者我应该通过创建上下文的另一个实例来处理这个问题吗?

更新:似乎我走错了路...... 我仍然在考虑对数据库查询进行分类......

我在这里解决问题的方法就是加载用户,包括已分配和拥有的任务......

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

如果其他人做同样的事情,将会制作此社区维基。

1 个答案:

答案 0 :(得分:0)

您的意思是将 Where(t =&gt; t.UserId = userId)或者您的意思是:

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

即。你使用赋值运算符而不是比较。 (LINQ在后台将SQL中的“==”转换为“=”,但您必须使用C#运算符。)