Sunshine数据库篇之查询

本文介绍了一种.NET轻量级ORM框架的使用方法,包括数据库连接配置、基本查询、多表连接、条件使用及复杂查询技巧等核心功能。

  .net轻量级ORM


连接sqlserver

  <appSettings>
    <add key="Con" value="Data Source =192.168.10.8;Initial Catalog = XDB;User Id = sa;Password = 123456;" />
    <add key="Type" value="SqlServer"/>
  </appSettings>

连接mysql

  <appSettings>
    <add key="Con" value="server=192.168.1.1;uid=root;database=aa;pwd=1234;CharSet=gb2312;Convert Zero Datetime=True;" />
    <add key="Type" value="MySql"/>
  </appSettings>



1:最简单的查询单条记录

User ou = IDB.Simple<User>(CModel.User.Select.Where(a => a.USER_TYPE == 1 & a.PASSWORD == "aaa"));

   同写sql的方式

User ou = IDB.Simple<User>("select * from User where USER_TYPE = @ut and PASSWORD = @pa", new { ut = 1, pa = "aaa" });

 


2:查询多条记录

List<User> olist = IDB.List<User>(CModel.User.Select.Where(a=>a.UUID > 2));

  同写sql的方式

List<User> olist = IDB.List<User>("select * from User where uuid > @uid", new { uid = 2 });

  查询1000条30毫秒左右

 

 3:条件的使用

   使用 and    (where a.USER_TYPE = @a3qf6eqse and  a.PASSWORD = @dve2tge)

CModel.User.Select.Where(a => a.USER_TYPE == 1 & a.PASSWORD == "aaa") 

   使用 or       (where a.USER_TYPE = @a3qf6eqse or  a.PASSWORD = @dve2tge)

CModel.User.Select.Where(a => a.USER_TYPE == 1 | a.PASSWORD == "aaa")

      使用 Between and  

CModel.User.Select.Where(a => a.ID.Between(1,20))

      使用like

CModel.User.Select.Where(a => a.ID.Like("%"+2)))

      使用 > ,>=,< <=.......

CModel.oll_user.Select.Where(a => a.UUID>10 & a.UUID <= 20 | a.UUID >=20)

     

     循环添加条件,有时需要更具某些条件,循环添加,whereor和前边条件or连接,whereand 即and连接    

var wc = CModel.Price_UpSet_Unite.Select.Where(a => a.Id == 1234);
            for (int i = 0; i < 2; i++)
            {
                wc.WhereOr(a => a.Id == i);
                wc.WhereAnd(a => a.ErrorReason == 1234);
            }
            string sqls = DB.IDB.ToSql(wc);  

    复杂的循环添加条件,有时不仅要循环添加条件而且循环添加的条件还必须做为一个整体和前边的条件连接

    wc.WrapWhereAndBegin()括号开始
    wc.WrapWhereEnd();括号结束

var wc = CModel.Price_UpSet_Unite.Select.Where(a => a.Id == 1234);
            //开始循环条件处理
            wc.WrapWhereAndBegin();
            for (int i = 0; i < 2;i++ )
            {
                wc.WhereOr(a => a.CurrencyName == 1234);
                wc.WhereOr(a => a.ErrorReason == 1234);
            }
            //结束循环条件处理
            wc.WrapWhereEnd();
            string sqls = DB.IDB.ToSql(wc);



 4:选择你需要查询的字段

     使用Column函数进行字段选择   as函数重命名

 

     只查询NAME一个字段并重名

IDB.Simple<User>(CModel.User.Select.Where(a => a.USER_TYPE == 1 & a.PASSWORD == "aaa").Column(a=>a.PLAYER_NAME.As("name")))

     查询多个字段

IDB.Simple<User>(CModel.User.Select.Where(a => a.USER_TYPE == 1 & a.PASSWORD == "aaa").Column(a=>new[]{a.PLAYER_NAME,a.STATUS,a.PASSWORD}))

   匹配dto,ColumnFitType

   

  如果要查询的字段在这个DTO里边不用一个一个去打,直接调用这个方法可以自动匹配 

  参数可以指定表前缀:如果不指定前缀可能出现调用不明确的问题,join或多表查询的时候

  参数可以指定需要忽略的字段:不想查询指定DTO的全部字段时可使用

  


 5:多表连接查询

    使用 join  ,left join ,right join 函数

 

   使用 join   gambleOrder连接notice表 条件为 gambleOrder.id =notice.id 写法

List<gambleOrder> olist = IDB.List<gambleOrder>(CModel.oll_user.Select.Join<AJ.CModel.notice>((a, b) => a.id== b.id).Where(a => a.UUID > 10 & a.UUID <= 20 | a.UUID >= 20));


   使用left join   gambleOrder连接notice表 条件为 gambleOrder.id =notice.id 写法

List<gambleOrder> olist = IDB.List<gambleOrder>(CModel.oll_user.Select.LeftJoin<AJ.CModel.notice>((a, b) => a.id== b.id).Where(a => a.UUID > 10 & a.UUID <= 20 | a.UUID >= 20));

  

   多表join

   



 6:常用函数的使用

    直接到字段选择中就可以使用常用的函数,可以随意的进行组合的运算操作

    使用平均函数Avg

List<gambleOrder> go = DataBase.IDB.List<gambleOrder>(
                CModel.gambleOrder.Select.Where(a => a.UUID > 10)
                .Column(a=>a.NICK_NAME.Avg));

   使用求和函数Sum

List<gambleOrder> go = DataBase.IDB.List<AJ.Model.gambleOrder>(
                CModel.gambleOrder.Select.Where(a => a.UUID > 10)
                .Column(a=>a.NICK_NAME.Sum));

   组合运算操作  求平均数在计数在除以求和数

List<gambleOrder> go = DataBase.IDB.List<gambleOrder>(
                CModel.gambleOrder.Select.Where(a => a.UUID > 10)
                .Column(a=>(a.NICK_NAME.Avg*a.PASSWORD.Count)/a.STATUS.Sum));


 

7:分组排序

    a:分组

      更具STATUS分组

List<gambleOrder> go = DataBase.IDB.List<gambleOrder>(
                CModel.gambleOrder.Select.GroupBy(a=>a.STATUS));

       更具id和 name分组

City.Select.GroupBy(a => new []{a.Id,a.Name})

     join后多表分组

    


   b:排序
      排序     更具id降序排序 desc

List<AJ.Model.gambleOrder> go = DataBase.IDB.List<AJ.Model.gambleOrder>(
                AJ.CModel.gambleOrder.Select.OrderBy(a=>a.ID.desc));


     多字段排序     更具id降序排序 desc ,name升序asc   要使用&连接必须要加上desc,或者asc

AJ.CModel.City.Select.OrderBy(a=>a.Id.desc &a.Name.asc)

     join后多表排序

     


8:返回键值对

   

Dictionary<string, string> dic = DB.IDB.ListKevValue<string, string>(CModel.Price_Ship.Select.Join<CModel.Relate_Ship>
                ((a, b) => a.Id == b.ShipID).Column<CModel.Price_Ship, CModel.Relate_Ship>((a, b) => new[] { b.ShipID, a.NameEN }));
    只能返回两列,第一列作为键,第二列作为值


9:分页

  1:使用page

  

   2:分页时需要先查询总条数

       .New表示生成一个新的对象,利用条件返回总条数后不影响后边的返回

      


10:子查询

    a:in使用子查询

         

   b:相关子查询

   



评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值