首页 > 其他分享 >EF Core Like 模糊查询

EF Core Like 模糊查询

时间:2023-07-17 22:33:26浏览次数:35  
标签:__ Core Like EF DeptCode query condition

在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

标签:__,Core,Like,EF,DeptCode,query,condition
From: https://www.cnblogs.com/xjxue/p/17558826.html

相关文章

  • 浅析vue3中如何使用动态组件、如何快速理解Vue3的 toRaw和markRaw、ref与shallowRef、
    一、Vue3中使用component:is加载动态组件1、不使用setup语法糖,这种方式和vue2差不多,is可以是个字符串2、使用setup语法糖,这时候的is如果使用字符串就会加载不出来,得使用组件实例<componentclass="task-box":is="componentObj[route.params.type]":info="taskInfo"></co......
  • .NET Core6.0 通过EF的方式如何链接MySQL
    之前一直用的是EF链接SQLServer今天聊一聊EF链接MySQL第一步我们首先创建一个简单的用户实体类 这里呢创建了一个主键为string类型的用户Id和一个用户名称第二步我们创建一个类库里面创建上下文类 但是这里需要注意引用的NuGet包和链接SQLServer的包有个是不一样的这是......
  • CodeForces 1848E Vika and Stone Skipping
    洛谷传送门CF传送门感觉比这场的F简单。发现我们要进行\(x\)不断乘一些数然后求答案的操作,猜测答案与\(x\)的因数有关。如果你对数字比较敏感,不难发现答案就是\(x\)的奇因子个数。官方题解的证明:设\(x=f+(f-1)+\cdots+(f-(c-1))\),由等差数列求和公......
  • ::before中的元素无法用xpath进行定位
    上述代码中定位知道了这个按钮,使用常规的xpath无法定位到,查了很多资料有说什么js转的等等,都不对,结果试了试使用CSS_SELECTOR进行定位,就可以定位到。使用CSS选择器定位弹窗中的"知道了"按钮`button=WebDriverWait(driver,10).until(EC.presence_of_element_located((By.CS......
  • net core-未来
    满足未来30年每周吃一个鸭子的需求为了计算从现在开始养多少只鸭子,以满足未来30年每周吃一个鸭子的需求,我们需要考虑以下几个因素:鸭子的寿命:鸭子的寿命通常在5到10年之间,具体取决于品种和饲养条件。我们可以假设鸭子的寿命为7年。繁殖周期:鸭子的繁殖周期平均为28天,这是鸭子......
  • Codeforces Round 885 (Div. 2) A-D
    A.VikaandHerFriends题意:有一个n*m大小的矩阵,vika在点(a,b),她的k个朋友在分别(xi,yi),所有人每分钟都可以上下左右走一格,每一分钟vika先走,她的朋友后走,不能不走,问vika能否躲过朋友。Solution结论题,只要有一个朋友和她的距离是奇数,那么她肯定会被追上。voidsolve(){ int......
  • net core-反向代理
    推荐使用框架:Yarp.ReverseProxy,微软开源的框架一基本使用varbuilder=WebApplication.CreateSlimBuilder(args);builder.Services.AddReverseProxy().LoadFromConfig(builder.Configuration.GetSection("ReverseProxy"));varapp=builder.Build();app.MapRevers......
  • Codeforces Round #885(Div. 2)C
    C.维卡和价格标签每个测试的时间限制为1秒每个测试的内存限制为256兆字节输入:标准输入输出:标准输出维卡来到她最喜欢的化妆品店"GoldenPear"。她注意到n个物品的价格自她上次光顾以来发生了变化。她决定分析价格的变化,并计算每个物品的旧价格和新价格之间的差异。维卡喜......
  • mysql报错:You must reset your password using ALTER USER statement before executin
    mysql报错:YoumustresetyourpasswordusingALTERUSERstatementbeforeexecutingthisstatement.新安装mysql后,登录后,执行任何命令都会报错:YoumustresetyourpasswordusingALTERUSERstatementbeforeexecutingthisstatement. 【解决办法】MySQL版本5.7.6版本......
  • asp.net core的中间件
    中间件是asp.netcore的核心,甚至可以说asp.netcorewebapi应用就是一个中间件管道,接口请求和响应一来一回。中间件,就是装配到这个管道中用来处理请求响应的组件。关于中间件的使用,有三个核心方法:核心方法Useapp.Use(async(context,next)=>{//代码awaitnext.I......