C # - операторы LINQ с предложениями OR - PullRequest
26 голосов
/ 13 марта 2010

Я пытаюсь использовать LINQ, чтобы вернуть список задач, которые находятся в одном из трех состояний. Эти состояния:

10 - Завершено 11 - незавершенный 12 - пропущено

Состояние доступно через свойство с именем «TaskStateID». Я могу сделать это в LINQ только с одним состоянием, как показано здесь:

var filteredTasks = from task in tasks
                    select task;

// Do stuff with filtered tasks

string selectedComboBoxValue = GetFilterComboBoxValue();
if (selected ComboBoxValue == 3)
{
  filteredTasks = filteredTasks.Where(p => p.TaskStateID == 10); // How do I use an 'OR' here to say p.TaskStateID == 10 OR p.TaskStateID == 11 OR p.TaskStateID == 12
}

Как показано в комментарии выше, как мне использовать 'ИЛИ' в операторе LINQ, чтобы сказать p.TaskStateID == 10 ИЛИ p.TaskStateID == 11 ИЛИ p.TaskStateID == 12?

Спасибо

Ответы [ 6 ]

39 голосов
/ 13 марта 2010

Используйте оператор OR (||):

filteredTasks = filteredTasks.Where(p => p.TaskStateID == 10 || 
                                         p.TaskStateID == 11 || 
                                         p.TaskStateID == 12);
18 голосов
/ 13 марта 2010
var taskIds = new[]{10, 11, 12}

var selectedTasks = filteredTasks.Where(p => taskIds.Contains(p.TaskStateID))
8 голосов
/ 13 марта 2010

Используйте условный оператор ИЛИ :

filteredTasks = filteredTasks.Where(p => p.TaskStateID == 10 ||
                                         p.TaskStateID == 11 ||
                                         p.TaskStateID == 12);
2 голосов
/ 13 марта 2010

Самый простой способ:

.Where(p => p.TaskStateID == 10 || p.TaskStateID == 11 || p.TaskStateID == 12)

Или вы можете сделать что-то вроде этого:

var states = new int[] {10,11,12};
filteredTasks = filteredTasks.Join(states, p => p.state, s => s, (p, s) => p);
1 голос
/ 13 марта 2010
filteredTasks.Where(p => (p.TaskStateID == 10 || p.TaskStateID == 11 || p.TaskStateID == 12))
1 голос
/ 13 марта 2010

Очень просто: вы используете логические ИЛИ.

filteredTasks.Where(p => p.TaskStateID == 10 || p.TaskStateID == 11 || p.TaskStateID == 12)

C # лямбды не используют подмножество языка C #: они используют весь язык. Все возможное в C # доступно лямбдам. Единственное требование - выражение должно возвращать правильный тип; и даже тогда вы можете использовать фигурные скобки, чтобы охватить более сложный код:

p => { /* code block that has a return statement here */ }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...