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