MyDAL - .Where() 之 .WhereSegment 根据条件 动态设置 Select查询条件 使用
程序员文章站
2022-06-18 09:58:23
索引: 目录索引 一.API 列表 1.WhereSegment 属性,指示 根据条件 动态拼接 where 查询过滤条件 见如下示例. 二.API 单表-完整 方法 举例 以 MySQL 为例,生成 SQL 如下,其中 ?Name_2 的值自动生成为 【伏%】 : 三.API 多表-连接 方法 举 ......
索引:
一.api 列表
1.wheresegment 属性,指示 根据条件 动态拼接 where 查询过滤条件
见如下示例.
二.api 单表-完整 方法 举例
1 // 上下文条件 变量 2 var userid = "08d6036b-0a7e-b07d-b9bd-af03841b3baa"; 3 var firstname = "伏"; 4 5 var where = conn.queryer<agent>().wheresegment; 6 7 // 根据条件 判断 是否 拼接 userid 字段 的 过滤条件 8 if (!userid.isnullstr()) 9 { 10 where = where.and(it => it.userid == guid.parse(userid)); 11 } 12 13 // 根据条件 判断 是否 拼接 name 字段 的 过滤条件 14 if (!firstname.isnullstr()) 15 { 16 where = where.and(it => it.name.startswith(firstname)); 17 } 18 19 // 对 wheresegment 设定的条件 进行 select 动作 20 var res1 = await where.querylistasync(); 21 22 assert.true(res1.count==1);
以 mysql 为例,生成 sql 如下,其中 ?name_2 的值自动生成为 【伏%】 :
1 select * 2 from `agent` where true 3 and `userid`=?userid_1 4 and `name` like ?name_2;
三.api 多表-连接 方法 举例
1 // 上下文 分页 变量 2 var pageindex = 2; 3 var pagesize = 10; 4 5 // 上下文 条件 变量 6 var level = (nullable<agentlevel>)agentlevel.distiagent; 7 var pk1 = guid.parse("fbad4af4-c160-4e66-a8fc-0165443b4db0"); 8 9 // 可 *混合书写 多个 inner join 或 left join 10 var where = conn 11 .queryer(out agent agent, out agentinventoryrecord record) 12 .from(() => agent) 13 .leftjoin(() => record) 14 .on(() => agent.id == record.agentid).wheresegment; 15 16 // 根据条件 判断 是否 拼接 agentlevel 字段 的 过滤条件 17 if (level != null) 18 { 19 where = where.and(() => agent.agentlevel == level); // and demo 20 } 21 22 // 根据条件 判断 是否 拼接 id 字段 的 过滤条件 23 if (pk1 != guid.empty) 24 { 25 where = where.or(() => agent.id == pk1); // or demo 26 } 27 28 // 对 wheresegment 设定的条件 进行 select 动作 29 var res1 = await where.querypagingasync<agent>(pageindex, pagesize); 30 31 assert.true(res1.data.count == 10); 32 assert.true(res1.totalcount == 575);
以 mysql 为例,生成 sql 如下:
1 -- 总数据量 sql 2 3 select count(*) 4 from ( 5 select agent.`*` 6 from `agent` as agent 7 left join `agentinventoryrecord` as record 8 on agent.`id`=record.`agentid` where true 9 and agent.`agentlevel`=?agentlevel_4 10 or agent.`id`=?id_5 11 ) temp; 12 13 -- 分页数据 sql 14 15 select agent.`*` 16 from `agent` as agent 17 left join `agentinventoryrecord` as record 18 on agent.`id`=record.`agentid` where true 19 and agent.`agentlevel`=?agentlevel_4 20 or agent.`id`=?id_5 21 order by agent.`id` desc 22 limit 10,10;
蒙
2019-04-18 23:30 周四