随笔 - 11  文章 - 0  评论 - 0  阅读 - 2310

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 中默认提供了StartsWithContainsEndsWith方法用于解决模糊查询

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

posted on   可乐加鸡翅  阅读(815)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示