MyDAL - .Where() 之 .WhereSegment 根據條件 動態設置 Select查詢條件 使用

索引:html

目錄索引sql

一.API 列表ui

  1.WhereSegment 屬性,指示 根據條件 動態拼接 where 查詢過濾條件spa

    見以下示例.code

二.API 單表-完整 方法 舉例htm

 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 的值自動生成爲 【伏%】 :blog

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 以下:get

 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;

 

 

 

 

                                         蒙it

                                    2019-04-18 23:30 週四

相關文章
相關標籤/搜索