首先,抱歉标题不好,我只能描述问题
假设服务器上的数据库有一个名为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")
如果其他人做同样的事情,将会制作此社区维基。
答案 0 :(得分:0)
您的意思是将 Where(t =&gt; t.UserId = userId)或者您的意思是:
Where(t => t.UserId == userId);
即。你使用赋值运算符而不是比较。 (LINQ在后台将SQL中的“==”转换为“=”,但您必须使用C#运算符。)