C# – 带有OR子句的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 OR p.TaskStateID == 11 OR 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)) 

使用条件OR运算符:

 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) 

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

 p => { /* code block that has a return statement here */ } 
 filteredTasks.Where(p => (p.TaskStateID == 10 || p.TaskStateID == 11 || p.TaskStateID == 12))