欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

MyDAL - .Where() 之 .WhereSegment 根据条件 动态设置 Select查询条件 使用

程序员文章站 2022-03-13 17:46:18
索引: 目录索引 一.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 周四