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

C# Web API用LINQ查MySQL多条件报CS0019错误的正确写法

CS0019报错原因与正确查询实现

报错根因

编译错误CS0019是因为Where里的Lambda条件表达式写法不合法:逻辑与运算符&&要求两侧的操作数都必须返回布尔值(bool),你的代码里&&某一侧的表达式返回了string类型,通常是以下几种笔误导致:

  • 把城市字段的相等判断==误写为赋值运算符=,赋值表达式返回的是被赋值的字符串本身
  • 漏写城市字段的判断逻辑,直接把字符串类型的City字段放在&&操作数位置
  • 括号匹配错误导致表达式运算优先级错乱,字符串字段被直接作为&&的操作数

前置约定

以下写法基于常规实体配置:

  • Person实体包含整型薪资字段Salary
  • 若地址信息独立存储:Person持有Address类型的导航属性,Address实体包含字符串类型的城市字段City
  • 方法入参为int salaryThreshold(用户传入的薪资阈值)、string targetCity(用户传入的目标查询城市)

正确查询写法

场景1:Person表直接存储City字段(无地址关联表)

var result = _context.Persons
    .Where(p => p.Salary > salaryThreshold && p.City == targetCity)
    .ToList();

场景2:City字段存在关联的Address表中

如果返回结果需要附带地址信息,添加Include加载导航属性即可,仅做过滤时可以省略:

var result = _context.Persons
    .Include(p => p.Address) // 需引入Microsoft.EntityFrameworkCore命名空间
    .Where(p => p.Salary > salaryThreshold && p.Address.City == targetCity)
    .ToList();

注意事项

  • 字符串比较默认使用数据库配置的排序规则,如果需要忽略大小写匹配,优先通过MySQL排序规则配置实现,不要在LINQ中调用ToLower()/ToUpper()等方法,否则会触发全表扫描影响查询性能
  • 所有过滤逻辑会被EF Core转换成对应SQL下推到MySQL执行,不会加载全表数据到内存做过滤

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 18:36:24