在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
标签:__,Core,Like,EF,DeptCode,query,condition From: https://www.cnblogs.com/xjxue/p/17558826.html