C# - 带有OR子句的LINQ语句

时间:2010-03-13 16:57:10

标签: c# linq

我正在尝试使用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语句中使用'OR'来表示p.TaskStateID == 10或p.TaskStateID == 11或p.TaskStateID == 12?

谢谢

6 个答案:

答案 0 :(得分:38)

使用OR(||)运算符:

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

答案 1 :(得分:18)

var taskIds = new[]{10, 11, 12}

var selectedTasks = filteredTasks.Where(p => taskIds.Contains(p.TaskStateID))

答案 2 :(得分:8)

使用conditional OR运算符:

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

答案 3 :(得分:2)

最简单的方法:

.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);

答案 4 :(得分:1)

非常简单:您使用逻辑OR。

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

C#lambdas不使用C#语言的子集:它们使用整个语言。 Lambda可以使用C#中的所有可能内容。唯一的要求是表达式必须返回正确的类型;即使这样你也可以使用花括号来包含更复杂的代码:

p => { /* code block that has a return statement here */ }

答案 5 :(得分:1)

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