LINQ 中的动态 where 条件
- 作者: 梁书记i
- 来源: 51数据库
- 2022-12-13
问题描述
我有一个场景,我必须在 LINQ 中使用动态 where 条件.
I have a scenario where I have to use a dynamic where condition in 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",但是对此有什么解决方案?
I know we can't use the 'If' in the middle of the Linq query but what is the solution for this?
请帮忙...
推荐答案
所以,如果 flag 是 false 你需要所有 Jhoms,如果 flag 是的,您只需要 IT 部门的 Jhoms
So, if flag is false you need all Jhoms, and if flag is true you need only the Jhoms in the IT department
这个条件
!flag || (e.Field<string>("EmployeeDepartment") == "IT"
满足该标准(如果标志为假,则总是为真,等等),因此查询将变为:
satisfies that criterion (it's always true if flag is false, etc..), so the query will become:
from e in employee
where e.Field<string>("EmployeeName") == "Jhom"
&& (!flag || (e.Field<string>("EmployeeDepartment") == "IT")
select e.Field<string>("EmployeeID")
还有,这个 e.Field
also, this e.Field<string>("EmployeeID") business, smells like softcoding, might take a look into that. I guess
from e in employee where e.EmployeeName == "Jhom" && (!flag || (e.EmployeeDepartment == "IT") select e.EmployeeID
会更紧凑,更不容易出现打字错误.
would be more compact and less prone to typing errors.
此答案适用于此特定场景.如果您有很多此类查询,请务必投资其他答案中提出的模式.
This answer works for this particular scenario. If you have lots of this kinds of queries, by all means investingate the patterns proposed in the other answers.
- C#通过fleck实现wss协议的WebSocket多人Web实时聊天(附源码)
- 团队城市未满足要求:MSBuildTools12.0_x86_Path 存在
- 使用 MSBuild.exe 在发布模式下构建 C# 解决方案
- 当我发布 Web 应用程序时,AfterPublish 脚本不运行
- 构建时 T4 转换的产品仅在下一个构建中使用
- ASP.NET Core Application (.NET Framework) for Windows x64 only error in project.assets.json
- 新的 .csproj 格式 - 如何将整个目录指定为“链接文件"到子目录?
- 如何将条件编译符号(DefineConstants)传递给 msbuild
- MSBuild 支持 Visual Studio 2017 RTM 中的 T4 模板
- NuGet 包还原找不到包,没有源
