EF Core Lambda表达式中&&与||使用问题:查询异常及语法报错
EF Core 查询参数失效问题解决
问题根源
原代码逻辑优先级错误:
&&的优先级比||高,原代码实际执行逻辑是:x.Company == company || (company == null && x.LastName == name || (name == null && x.TransportState.Name == state || state == null))这导致只有当
company为空时,才会判断后面的name和state条件,所以看起来只有company参数生效。修改后的语法错误:
Where方法仅接受一个Lambda表达式作为参数,你把三个独立Lambda用&&连接,编译器会报错“运算符'&&'无法应用于lambda表达式类型的操作数”。
正确写法
把所有条件放在同一个Lambda里,给每个参数的判断单独加括号,用&&连接所有分组条件:
var transporters = await _db.TransporterProfiles .Include(x => x.TransportState) // 注意:如果TransportState可能为null,必须加空判断避免空引用异常 .Where(x => (x.Company == company || company == null) && (x.LastName == name || name == null) && (x.TransportState != null && x.TransportState.Name == state || state == null)) .ToListAsync();
补充说明
- 每个括号内的逻辑:参数不为空时匹配对应字段;参数为空时,该条件自动成立(不做筛选)。
- 必须判断
TransportState是否为null,否则当关联的TransportState不存在时,会抛出NullReferenceException。
内容的提问来源于stack exchange,提问作者CrankySwan
相关产品推荐
相关产品推荐

