EF Core Like 模糊查询
在EF Core 中可用EF.Functions.Like() 、StartWith、Contains、EndsWith 实现模糊查询
EF.Functions.Like()
在Entity Framework Core 2.0中增加一个很酷的功能:EF.Functions.Like()
,最终解析为SQL中的Like
语句,以便于在 LINQ 查询中直接调用。
query = query.Where(d => EF.Functions.Like(d.DeptCode, "%" + condition + "%") || EF.Functions.Like(d.DeptName, "%" + condition + "%"));
EF 中默认提供了StartsWith
、Contains
和EndsWith
方法用于解决模糊查询
StartsWith
:表示字符串的开头是否与指定的字符串匹配;
Contains
:表示指定的子串是否出现在此字符串中;
EndsWith
:表示字符串的结尾是否与指定的字符串匹配;
1、直接使用固定字符串
query.Where(d=>d.DeptCode.Contains("H33")) query.Where(d=>d.DeptCode.StartsWith("H33")) query.Where(d=>d.DeptName.EndsWith("生产部门"))
转换成SQL:
WHERE ([d].[DeptCode] LIKE '%H33%') WHERE ([d].[DeptCode] LIKE 'H33%') WHERE ([d].[DeptName] LIKE N'%生产部门')
2、使用字符串变量
query.Where(d=>d.DeptCode.Contains(condition))) query.Where(d=>d.DeptCode.StartsWith(condition)) query.Where(d=>d.DeptName.EndsWith(condition)))
转换成SQL:
DECLARE @__condition_1 varchar(5) = 'H33'; WHERE ((@__condition_1 LIKE '') OR CHARINDEX(@__condition_1, [d].[DeptCode]) > 0) DECLARE @__condition_1 nvarchar(4000) = N'H33'; DECLARE @__condition_1_1 varchar(5) = 'H33'; WHERE (@__condition_1 = N'' OR LEFT([d].[DeptCode], LEN(@__condition_1_1)) = @__condition_1_1) DECLARE @__condition_1 nvarchar(4000) = N'H33'; DECLARE @__condition_1_1 nvarchar(20) = N'H33'; WHERE (@__condition_1 = N'' OR RIGHT([d].[DeptName], LEN(@__condition_1_1)) = @__condition_1_1)
注意:使用固定字符串 EF LINQ 语法转换SQL 时,Contains、StartsWith、EndsWith都转换成了LIKE ;但是使用字符串变量时,Contains、StartsWith、EndsWith分别转换成了 CHARINDEX、LEFT、RIGHT
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)