MyDAL - like && not like 条件 使用
索引:
一.api 列表
c# 代码中 string.contains("conditionstr") 生成 sql 对应的 like '%conditionstr%'
如:.queryer<agent>()
... ...
.where(it => it.pathid.contains("~00-d-3-1-"))
... ... 用于 单表 like 条件
.queryer(out agent agent1, out agentinventoryrecord record1)
... ...
.where(() => agent1.name.contains("陈"))
... ... 用于 多表连接 like 条件
c# 代码中 string.startswith("conditionstr") 生成 sql 对应的 like 'conditionstr%'
如:.queryer<agent>()
... ...
.where(it => it.pathid.startswith("~00-d-3-1-"))
... ... 用于 单表 like 条件
.queryer(out agent agent13, out agentinventoryrecord record13)
... ...
.where(() => agent13.name.startswith("张"))
... ... 用于 多表连接 like 条件
c# 代码中 string.endswith("conditionstr") 生成 sql 对应的 like '%conditionstr'
如:.queryer<agent>()
... ...
.where(it => it.pathid.endswith("~00-d-3-1-"))
... ... 用于 单表 like 条件
.queryer(out agent agent13, out agentinventoryrecord record13)
... ...
.where(() => agent13.name.endswith("华"))
... ... 用于 多表连接 like 条件
mysql 通配符 %(百分号) / _(下划线)
在 string 变量中若检测到 通配符 存在,则以自定义的通配符表达式 在 db 中进行 like 查询
c# 代码中 通配符转义 /%(百分号转义) / /_(下划线转义)
在 string 变量中若检测到 通配符转义 存在 ,则会在 db 中以转义后 字面值 的形式进行 like 查询
二.api 单表-便捷 方法 举例
1. like 条件
1 var res1 = await conn.querylistasync<agent>(it => it.name.contains("陈"));
生成 sql 如下
1 select * 2 from `agent` 3 where `name` like concat('%',@name__1,'%');
2. not like 条件
1 var res1 = await conn.querylistasync<agent>(it => !it.name.contains("刘"));
生成 sql 如下
1 select * 2 from `agent` 3 where `name` not like concat('%',@name__1,'%');
三.api 单表-完整 方法 举例
1. like 条件
1 var res1 = await conn 2 .queryer<agent>() 3 .where(it => it.createdon >= convert.todatetime("2018-08-23 13:36:58").adddays(-30)) 4 .and(it => it.pathid.contains("~00-d-3-1-")) 5 .paginglistasync(1, 10);
生成 sql 如下
1 -- 总数 2 select count(*) 3 from `agent` 4 where `createdon`>=@createdon__1 5 and `pathid` like concat('%',@pathid__2,'%'); 6 7 -- 分页数据 8 select * 9 from `agent` 10 where `createdon`>=@createdon__1 11 and `pathid` like concat('%',@pathid__2,'%') 12 order by `id` desc 13 limit 0,10;
2. not like 条件
1 var res1 = await conn 2 .queryer<agent>() 3 .where(it => !it.pathid.contains("~00-d-3-1-")) 4 .paginglistasync(1, 10);
生成 sql 如下
1 -- 总数 2 select count(*) 3 from `agent` 4 where `pathid` not like concat('%',@pathid__1,'%'); 5 6 -- 分页数据 7 select * 8 from `agent` 9 where `pathid` not like concat('%',@pathid__1,'%') 10 order by `id` desc 11 limit 0,10;
四.api 多表连接-完整 方法 举例
1. like 条件
1 var res1 = await conn 2 .queryer(out agent agent1, out agentinventoryrecord record1) 3 .from(() => agent1) 4 .innerjoin(() => record1) 5 .on(() => agent1.id == record1.agentid) 6 .where(() => agent1.name.contains("陈")) 7 .querylistasync<agentinventoryrecord>();
生成 sql 如下
1 select record1.`*` 2 from `agent` as agent1 3 inner join `agentinventoryrecord` as record1 4 on agent1.`id`=record1.`agentid` 5 where agent1.`name` like concat('%',@name__4,'%');
2. not like 条件
1 var res1 = await conn 2 .queryer(out agent agent1, out agentinventoryrecord record1) 3 .from(() => agent1) 4 .innerjoin(() => record1) 5 .on(() => agent1.id == record1.agentid) 6 .where(() => !agent1.name.contains("陈")) 7 .querylistasync<agentinventoryrecord>();
生成 sql 如下
1 select record1.`*` 2 from `agent` as agent1 3 inner join `agentinventoryrecord` as record1 4 on agent1.`id`=record1.`agentid` 5 where agent1.`name` not like concat('%',@name__4,'%');
五.string.startswith() 举例
1. like 条件
1 var res13 = await conn 2 .queryer(out agent agent13, out agentinventoryrecord record13) 3 .from(() => agent13) 4 .innerjoin(() => record13) 5 .on(() => agent13.id == record13.agentid) 6 .where(() => agent13.name.startswith("张")) 7 .querylistasync<agent>();
生成 sql 如下,其中 @name__4 的值会自动生成 '张%'
1 select agent13.`*` 2 from `agent` as agent13 3 inner join `agentinventoryrecord` as record13 4 on agent13.`id`=record13.`agentid` 5 where agent13.`name` like @name__4;
2. not like 条件
1 var res22 = await conn 2 .queryer(out agent agent22, out agentinventoryrecord record22) 3 .from(() => agent22) 4 .innerjoin(() => record22) 5 .on(() => agent22.id == record22.agentid) 6 .where(() => !agent22.name.startswith("张")) 7 .querylistasync<agent>();
生成 sql 如下,其中 @name__4 的值会自动生成 '张%'
1 select agent22.`*` 2 from `agent` as agent22 3 inner join `agentinventoryrecord` as record22 4 on agent22.`id`=record22.`agentid` 5 where agent22.`name` not like @name__4;
六.string.endswith() 举例
1. like 条件
1 var res13 = await conn 2 .queryer(out agent agent13, out agentinventoryrecord record13) 3 .from(() => agent13) 4 .innerjoin(() => record13) 5 .on(() => agent13.id == record13.agentid) 6 .where(() => agent13.name.endswith("华")) 7 .querylistasync<agent>();
生成 sql 如下,其中 @name__4 的值会自动生成 '%华'
1 select agent13.`*` 2 from `agent` as agent13 3 inner join `agentinventoryrecord` as record13 4 on agent13.`id`=record13.`agentid` 5 where agent13.`name` like @name__4;
2. not like 条件
1 var res22 = await conn 2 .queryer(out agent agent22, out agentinventoryrecord record22) 3 .from(() => agent22) 4 .innerjoin(() => record22) 5 .on(() => agent22.id == record22.agentid) 6 .where(() => !agent22.name.endswith("华")) 7 .querylistasync<agent>();
生成 sql 如下,其中 @name__4 的值会自动生成 '%华'
1 select agent22.`*` 2 from `agent` as agent22 3 inner join `agentinventoryrecord` as record22 4 on agent22.`id`=record22.`agentid` 5 where agent22.`name` not like @name__4;
七.mysql 通配符 %(百分号) 、 _(下划线) 举例
1. %
1 var res5 = await conn.querylistasync<agent>(it => it.name.contains("陈%"));
生成 sql 如下,其中 like 的时候 会保留 原状 按自定义的 格式串 查询,@name__1 的值为 '陈%'
1 select * 2 from `agent` 3 where `name` like @name__1;
2. _
1 var res6 = await conn.querylistasync<agent>(it => it.name.contains("王_"));
生成 sql 如下,其中 like 的时候 会保留 原状 按自己定义的 格式串 查询,@name__1 的值为 '王_'
1 select * 2 from `agent` 3 where `name` like @name__1;
八.mysql 通配符转义 /%(百分号转义)、/_(下划线转义) 举例
1. /%
1 var res7 = await conn 2 .queryer<agent>() 3 .where(it => it.name.contains("刘/%_")) 4 .and(it => it.id == resx4.id) 5 .and(it => it.name.contains("%华")) 6 .and(it => it.name.contains("%/%%")) 7 .querylistasync();
生成 sql 如下,其中 @name__1 的值为 '刘/%_' ,% 会按其 字面义 在db中匹配查询
1 select * 2 from `agent` 3 where `name` like @name__1 escape '/' 4 and `id`=@id__2 5 and `name` like @name__3 6 and `name` like @name__4 escape '/';
2. /_
1 var res8 = await conn.querylistasync<agent>(it => it.name.contains("何/__"));
生成 sql 如下,其中 @name__1 的值为 '何/__' ,_ 会按其 字面义 在db中匹配查询
1 select * 2 from `agent` 3 where `name` like @name__1 escape '/';
蒙
2019-02-18 14:45 周一
推荐阅读
-
sql语句like多个条件的写法实例
-
oracle使用instr或like方法判断是否包含字符串
-
在sp_executesql中使用like字句的方法
-
使用xadmin更新数据时,报错expected string or bytes-like object
-
PowerShell中使用Like运算符配合通配符查找字符串例子
-
MySQL中关于ORDERBY、DISTINCT、ALTER、LIKE/NOTLIKE、REGEXP/NOTREGEXP、COUNT、MAX的使用介绍
-
Mysql| 使用通配符进行模糊查询详解(like,%,_)
-
SQL SERVER中LIKE使用变量类型不同输出结果不一致解惑
-
MyDAL - like && not like 条件 使用
-
使用IDbCommandInterceptor解决EF-CORE-3.x-使用MYSQL时,未正常的生成LIKE查询语句