c# - 使用多个 where 的实体框架 Linq 查询
问题描述
多个 .Where() 是否充当 AND (&&) 或充当 Or (||) 例如:
var db = new myContext();
var query = db.User.Where(u => u.Gender == "Male");
query = query.Where(u => u.IsActive == true);
是否等同于:
Select *
from user
where gender = 'Male'
and IsActive = true;
解决方案
您将一个过滤器的结果传递给另一个过滤器,因此从逻辑上讲,它们将像“和”一样。
假设你有一副牌。然后,您使用只给您红牌的“过滤器”。然后,您希望将结果传递给另一个过滤器,该过滤器只为您提供七人制。
因此,您有效地获得了红色且价值为 7 的卡片。
有没有办法改变这种行为并使其充当“或”?
不,没有办法获取具有Where
子句的查询并“附加”第二个Where
子句,其作用类似于or
.
如果您尝试使用“或”操作动态附加过滤器,最直接的方法是将两个谓词与“或”组合(请参阅Linq Where() lambda 表达式中的“或”等效项)
另一种方法是重新使用原始查询,使用两个单独 Where
的查询和Union
结果。
var result1 = a.Where(u => u.Gender == "Male");
var result2 = a.Where(u => u.IsActive == true);
var result = result1.Union(result2);
但是这种“间接” OR 子句可能存在性能问题
推荐阅读
- android - Android 11 ADB - 通过 ADB 将应用程序添加到设备维护/内存选项中排除的应用程序
- java - java openjdk版本“1.8.0_292”的SSL错误
- azure-devops - azure-spring-boot-starter-keyvault-secrets 在 PCF 中的应用程序启动期间未解析 vcap 服务变量
- sql - group by 根据标题返回总共三列
- oracle - oracle中某些列的选择
- ratpack - 兼容的 Groovy 版本
- sql - 计算出现次数和出现次数的百分比
- vue.js - 从 vue.js 3 中传递数据的方法渲染组件
- vega - Vega:使画布适合容器宽度
- java - 如何使用 Apache POI 取消合并特定行中的单元格?