Lambda表达式仅选择集合中的某些项目

时间:2011-05-26 21:06:01

标签: c# lambda

我有这个循环遍历UserTaskQueueJoint实体的foreach循环。该实体有三个字段

  1. UserTaskQueueJoinID

  2. 用户ID

  3. TaskQueueID

  4. 它具有taskQueues和Tasks

    的导航属性

    我正在通过这些来运行foreach,并且只希望获得任务中的任务。因此,当我经历下面这个循环时,我会经历我的foreach循环两次,第一次我得到一个任务..然后第二次通过我得到额外的两个任务,但它删除了第一个任务。我确定我不应该使用where子句,我认为我应该使用select或者contains或'in'但我坚持如何实现。

    foreach (var _taskQueueJoin in UserTaskQueueJoin)
    {
    _query = _query.Where(x => x.AssignedToTaskQueueID == _taskQueueJoin.TaskQueueID);   
    }
    

3 个答案:

答案 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));