Лямбда-выражение Выберите только некоторые элементы из коллекции - PullRequest
2 голосов
/ 27 мая 2011

У меня есть цикл foreach, который проходит через объект UserTaskQueueJoint.Эта сущность имеет три поля

  1. UserTaskQueueJoinID

  2. UserID

  3. TaskQueueID

у него есть свойство навигации к taskQueues и к задачам

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

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

Ответы [ 3 ]

2 голосов
/ 27 мая 2011

Если я правильно понял ваш вопрос, вы можете заменить весь цикл следующим:

var TaskQueueIds = _taskQueueJoin.Select(t => t.TaskQueueID).ToArray()
_query = _query.Where(x => TaskQueueIds.Contains(x.AssignedToTaskQueueID))

Сначала собираются все идентификаторы очереди задач. Затем он фильтрует _query с одним .Where().

0 голосов
/ 27 мая 2011

Похоже, вы хотите запрос Contains:

var taskIds = UserTaskQueueJoin.Select( x=> x.TaskQueueID).ToArray();
_query = _query.Where(x => taskIds.Contains(x.AssignedToTaskQueueID));
0 голосов
/ 27 мая 2011

Будет ли .SelectMany() работать для вас здесь? Не зная точно, как выглядит ваша структура данных ...

DataContext.UserTaskQueueJoin
    .Where(x => x.UserID == {someuserid])
    .SelectMany(y => y.Tasks);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...