我有一个场景,我必须在LINQ中使用一个动态的条件.
我想要这样的东西:
public void test(bool flag) { from e in employee where e.Field<string>("EmployeeName") == "Jhom" If (flag == true) { e.Field<string>("EmployeeDepartment") == "IT" } select e.Field<string>("EmployeeID") }
我知道我们不能在Linq查询的中间使用“If”,但是这样做的解决方案是什么?
请帮忙…
解决方法
所以,如果flag是false,那么你需要所有Jhoms,如果flag是true,那么只需要IT部门的Jhoms
这个条件
!flag || (e.Field<string>("EmployeeDepartment") == "IT"
满足该标准(如果标志为false,则始终为真),因此查询将变为:
from e in employee where e.Field<string>("EmployeeName") == "Jhom" && (!flag || (e.Field<string>("EmployeeDepartment") == "IT") select e.Field<string>("EmployeeID")
同样,这个e.Field< string>(“EmployeeID”)业务,闻起来像softcoding,可能会考虑一下.我猜
from e in employee where e.EmployeeName == "Jhom" && (!flag || (e.EmployeeDepartment == "IT") select e.EmployeeID
会更紧凑,更不容易输入错误.
编辑:这个答案适用于这个特定场景.如果你有很多这样的查询,一切都意味着投资其他答案中提出的模式.