EF Core中Linq查询用Like替代==:修改GetByOrg方法实现模糊查询
嘿,这个需求很常见!要把原来的精确匹配改成模糊搜索,EF Core里有几种简单直接的实现方式,我给你一一说明:
1. 最常用的包含匹配(相当于 LIKE '%org%')
直接用字符串的Contains方法就行,EF Core会自动把它转换成SQL的LIKE语句,代码改起来超简单:
public List<Prj_Detail> GetByOrg(string org) { var data = _context.Prj_Details.Where(w => w.Account_Name.Contains(org)).ToList(); return data; }
这个写法会匹配所有Account_Name中包含org字符串的记录,是最常用的模糊搜索场景。
2. 前缀/后缀匹配
如果你的需求是只匹配以org开头或者结尾的记录,可以用StartsWith或EndsWith:
- 前缀匹配(
LIKE 'org%'):w => w.Account_Name.StartsWith(org) - 后缀匹配(
LIKE '%org'):w => w.Account_Name.EndsWith(org)
3. 自定义通配符的灵活匹配
要是你需要更灵活的匹配规则(比如用_匹配单个字符),可以用EF Core提供的EF.Functions.Like方法,它直接映射SQL的LIKE语法,记得先引入Microsoft.EntityFrameworkCore命名空间:
using Microsoft.EntityFrameworkCore; public List<Prj_Detail> GetByOrg(string org) { // 这里可以自定义通配符组合,比如%匹配任意长度字符、_匹配单个字符 var data = _context.Prj_Details.Where(w => EF.Functions.Like(w.Account_Name, $"%{org}%")).ToList(); return data; }
这种方式适合复杂的模糊匹配场景,比如你想搜org前面有两个字符的记录,就可以写成"__%org%"。
另外要放心:不管用哪种方式,EF Core都会自动参数化你的查询,不用担心SQL注入的问题~
内容的提问来源于stack exchange,提问作者trx
相关产品推荐
相关产品推荐

