EF Core如何使用like进行模糊查询 EF Core EF.Functions.Like方法

来源:这里教程网 时间:2026-02-21 17:43:11 作者:

EF Core 中使用

LIKE
进行模糊查询,推荐用
EF.Functions.Like()
,它能正确翻译为 SQL 的
LIKE
表达式,并支持数据库原生的通配符和转义逻辑。

基本用法:字符串字段匹配

直接在

Where
中调用
EF.Functions.Like()
,第一个参数是待查字段,第二个是带通配符的模式字符串:

  // 查找 Name 以 "张" 开头的用户

var users = context.Users
    .Where(u => EF.Functions.Like(u.Name, "张%"))
    .ToList();

生成的 SQL 类似:

WHERE [Name] LIKE N'张%'
。注意:
%
(任意多字符)、
_
(单个字符)等通配符由数据库解释,不是 C# 字符串处理。

安全处理用户输入:避免通配符被误用

如果搜索关键词来自用户(如搜索框),需手动转义通配符,否则可能产生非预期匹配(例如用户搜

"100%"
,会变成“以 100 开头的任意内容”):

  // 将 % _ [ 转义为字面量,并指定转义符为

string keyword = "100%";
string escaped = keyword.Replace("\", "\\")
                        .Replace("%", "\%")
                        .Replace("_", "\_")
                        .Replace("[", "\[");
var results = context.Products
    .Where(p => EF.Functions.Like(p.Description, $"%{escaped}%", "\"))
    .ToList();

第三个参数

"\"
指定转义符,SQL 中会生成
LIKE '%100%' ESCAPE ''
,确保
%
被当作普通字符。

不区分大小写的模糊匹配(按需)

多数数据库(如 SQL Server、PostgreSQL)默认

LIKE
区分大小写取决于列排序规则。若需强制不区分大小写,可统一转小写:

ToLower()
(注意:部分提供程序会将其转为 SQL 的
LOWER()
,但需确认是否走索引)
更稳妥方式是依赖数据库排序规则,或在查询前确保字段和模式都小写

  // 推荐(假设数据库排序规则支持)

.Where(u => EF.Functions.Like(u.Name.ToLower(), "zhang%"))

替代方案对比:Contains/StartsWith/EndsWith

这些方法语义清晰,但底层不一定都生成

LIKE

Contains("abc")
→ 通常生成
LIKE '%abc%'
StartsWith("abc")
→ 通常生成
LIKE 'abc%'
EndsWith("abc")
→ 通常生成
LIKE '%abc'

它们更简洁,适合简单场景;但需要自定义通配符位置、使用

_
或转义时,必须用
EF.Functions.Like()

基本上就这些。用对

EF.Functions.Like()
,既能发挥 SQL 模糊查询能力,又保持 EF Core 的类型安全和可移植性。

相关推荐

热文推荐