我有这个循环遍历UserTaskQueueJoint实体的foreach循环。该实体有三个字段
UserTaskQueueJoinID
用户ID
TaskQueueID
它具有taskQueues和Tasks
的导航属性我正在通过这些来运行foreach,并且只希望获得任务中的任务。因此,当我经历下面这个循环时,我会经历我的foreach循环两次,第一次我得到一个任务..然后第二次通过我得到额外的两个任务,但它删除了第一个任务。我确定我不应该使用where子句,我认为我应该使用select或者contains或'in'但我坚持如何实现。
foreach (var _taskQueueJoin in UserTaskQueueJoin)
{
_query = _query.Where(x => x.AssignedToTaskQueueID == _taskQueueJoin.TaskQueueID);
}
答案 0 :(得分:2)
假设我正确理解了您的问题,您可以用以下内容替换整个循环:
var TaskQueueIds = _taskQueueJoin.Select(t => t.TaskQueueID).ToArray()
_query = _query.Where(x => TaskQueueIds.Contains(x.AssignedToTaskQueueID))
首先将所有任务队列ID放在一起。然后,它会使用一个_query
过滤.Where()
。
答案 1 :(得分:0)
.SelectMany()
会在这里为你效力吗?不确切知道你的数据结构是什么样的......
DataContext.UserTaskQueueJoin
.Where(x => x.UserID == {someuserid])
.SelectMany(y => y.Tasks);
答案 2 :(得分:0)
您似乎想要Contains
查询:
var taskIds = UserTaskQueueJoin.Select( x=> x.TaskQueueID).ToArray();
_query = _query.Where(x => taskIds.Contains(x.AssignedToTaskQueueID));