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

MyDAL - .Where() & .And() & .Or() 使用

程序员文章站 2022-10-16 15:21:55
索引: 商业开发实战总结 一.API 列表 1.Where .Where(Func func) 如: .Where( it => (it.Prop1>=条件1 && it.Prop2<=条件2) || it.Prop3==条件3 ) 此类写法,用在 Deleter/Updater/ ......

索引:

商业开发实战总结

一.api 列表

  1.where

    .where(func<m, bool> func) 

      如: .where( it => (it.prop1>=条件1 && it.prop2<=条件2) || it.prop3==条件3 ) 此类写法,用在 deleter/updater/selecter 中.

    .where(func<bool>)

      如: .where( () => m1.propx==条件1 || m2.propy>条件2 && m3.propz<条件3 ) 此类写法,用在 joiner 中.

  2.and

    .and(func<m, bool> func)  .where(func<m, bool> func) .

    .and(func<bool>)  .where(func<bool>) .

  3.or

    .or(func<m, bool> func)  .where(func<m, bool> func) .

    .or(func<bool>)  .where(func<bool>) .

  注: where and or 三个 api 是可以组合使用的,我在这里将他们的关系 处理为 sql 中同样的用法,

    即一个 sql 查询中只可以点出一个where,但可以点出多个and 或 or

    如:  ...where(xxx).and(yyy).or(mmm).and(zzz)..... .

二.使用举例

  1.删除数据

1             var path = "~00-c-1-2-1-1-1-1-1-4-1-1-1-4-1-2-1-7";
2             var level = 2;
3             // where and
4             var res3 = await conn
5                 .deleter<agent>()
6                 .where(it => it.pathid == path)
7                 .and(it => it.agentlevel == (agentlevel)level)
8                 .deleteasync();

     生成的 sql 如下

1 delete
2 from `agent`   
3  where  `pathid`=@pathid__1   
4       and  `agentlevel`=@agentlevel__2 ;

  2.更新数据

1             var res8 = await conn
2                 .updater<agent>()
3                 .set(it => it.agentlevel, agentlevel.newcustomer)
4                 .where(it => it.id == guid.parse("0014f62d-2a96-4b5b-b4bd-01654438e3d4"))
5                 .updateasync();

    生成 sql 如下

1 update `agent`
2 set `agentlevel`=@agentlevel__1    
3  where  `id`=@id__2 ;

  3.单表查询数据

1             var guid4 = guid.parse("000cecd5-56dc-4085-804b-0165443bdf5d");
2             var pathid4 = "~00-d-3-2-1-c-2-f-4-3-1-2-4";
3             var level4 = agentlevel.customer;
4             var res4 = await conn
5                 .selecter<agent>()
6                 .where(it => it.id == guid4 && it.agentlevel==level4  && it.pathid == pathid4)
7                 .listasync();

    生成 sql 如下

1 select *
2 from `agent`   
3  where  (( `id`=@id__3  &&  `agentlevel`=@agentlevel__4 ) &&  `pathid`=@pathid__5 ) 
4 order by `createdon` desc ;

  4.连接查询数据

1             var res6 = await conn
2                 .joiner<agent, agentinventoryrecord>(out var agent6, out var record6)
3                 .from(() => agent6)
4                     .innerjoin(() => record6)
5                         .on(() => agent6.id == record6.agentid)
6                 .where(() => agent6.id == guid6)
7                 .firstordefaultasync<agent>();

    生成的 sql 如下

1 select       agent6.`*` 
2 from `agent` as agent6 
3      inner join  agentinventoryrecord as record6
4          on  agent6.`id`=record6.`agentid`   
5  where  agent6.`id`=@id__4 
6 order by agent6.`createdon` desc ;

 

 

 

 

                                         蒙

                                    2018-11-18 16:32 周日