C# · 12月 27, 2021

c# – 动态LINQ中的条件

我有一个场景,我必须在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

会更紧凑,更不容易输入错误.

编辑:这个答案适用于这个特定场景.如果你有很多这样的查询,一切都意味着投资其他答案中提出的模式.