You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EF Core使用表达式树构建动态查询生成异常CASE WHEN格式SQL问题

问题原因

你构建表达式树时错误使用了按位运算方法,而非逻辑运算方法:

  • Expression.Or 对应C#中的|按位或运算符,不是你需要的||逻辑或
  • Expression.And 对应C#中的&按位与运算符,不是你需要的&&逻辑与

EF Core 3.x无法将针对布尔值的按位运算直接转换为原生SQL逻辑运算符,只能先将每个布尔判断结果转换为1/0的bit类型,执行按位运算后再判断最终结果是否等于1,由此产生了你看到的大量CASE WHEN和CAST语句。

修复方案

替换代码中两处表达式聚合方法即可:

  1. 拼接同字段OR条件的orList.Aggregate(Expression.Or)修改为orList.Aggregate(Expression.OrElse)
  2. 拼接跨字段AND条件的andList.Aggregate(Expression.And)修改为andList.Aggregate(Expression.AndAlso)

修改后EF Core可以正确识别逻辑运算,生成你预期的简洁WHERE子句格式。

优化建议

针对同字段多个值匹配的场景,你也可以直接构建Contains方法调用的表达式,最终会生成IN语法的SQL,执行效率比多个OR条件更高,也更易读。


内容的提问来源于stack exchange,提问作者Apolonius

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 22:39:01