Ответ 1
Используйте оператор OR
(||):
filteredTasks = filteredTasks.Where(p => p.TaskStateID == 10 ||
p.TaskStateID == 11 ||
p.TaskStateID == 12);
Я пытаюсь использовать 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
}
Как показано в приведенном выше комментарии, как я могу использовать "OR" в операторе LINQ, чтобы сказать p.TaskStateID == 10 ИЛИ p.TaskStateID == 11 ИЛИ p.TaskStateID == 12?
Спасибо
Используйте оператор OR
(||):
filteredTasks = filteredTasks.Where(p => p.TaskStateID == 10 ||
p.TaskStateID == 11 ||
p.TaskStateID == 12);
var taskIds = new[]{10, 11, 12}
var selectedTasks = filteredTasks.Where(p => taskIds.Contains(p.TaskStateID))
Используйте оператор условный ИЛИ:
filteredTasks = filteredTasks.Where(p => p.TaskStateID == 10 ||
p.TaskStateID == 11 ||
p.TaskStateID == 12);
Самый простой способ:
.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);
Очень просто: вы используете логические OR.
filteredTasks.Where(p => p.TaskStateID == 10 || p.TaskStateID == 11 || p.TaskStateID == 12)
С# lambdas не используют подмножество языка С#: они используют весь язык. Все возможное в С# доступно для лямбда. Единственное требование заключается в том, что выражение должно возвращать правильный тип; и даже тогда вы можете использовать фигурные скобки, чтобы охватить более сложный код:
p => { /* code block that has a return statement here */ }
filteredTasks.Where(p => (p.TaskStateID == 10 || p.TaskStateID == 11 || p.TaskStateID == 12))