[LINQ2Dapper]最完整Dapper To Linq框架(一)---基础查询

此例子是使用LINQ2Dapper封装,效率优于EntityFramwork,并且支持.NetFramework和.NetCore框架,只依赖于Dapper

支持.net framework4.5.1,.net core2.0及以上,更低版本适配如.netFramework4.0及以下请加群下载

支持Mssql,Oracle,Mysql等数据库

     应用层需要引用包Kogel.Dapper.Extension.MsSql(如果数据库是Oracle则引用Kogel.Dapper.Extension.Oracle),Nuget上可以下载安装。

目录

(一)Model实体类 

 实体类层需要安装Kogel.Dapper.Extension表名字段特性。[更多特性详情请点击]

using Kogel.Dapper.Extension.Attributes;

 public class users
    {
        /// <summary>
        /// 用户id(特性Identity标识该字段为主键)
        /// </summary>    
        [Identity]
        public int id { get; set; }

        /// <summary>
        /// code
        /// </summary>    
        public string code { get; set; }

        /// <summary>
        /// 用户名称
        /// </summary>    
        public string name { get; set; }

        /// <summary>
        /// 创建方式(1自定义角色 2通用角色)
        /// </summary>    
        public int createWay { get; set; }

        /// <summary>
        /// 创建时间
        /// </summary>    
        public DateTime createDate { get; set; }

        /// <summary>
        /// 创建人
        /// </summary>    
        public string createUsers { get; set; }

        /// <summary>
        /// 角色id
        /// </summary>    
        public int roleId { get; set; }
}

 

(二)使用实例

首先添加命名空间

using Kogel.Dapper.Extension.MsSql;

可以通过数据库连接对象点出扩展方法,例如

var conn = new SqlConnection("数据库连接字符串");

使用完记得释放连接对象,可以通过using或者 conn.Dispose();


查询

var users = conn.QuerySet<users>().Where(x => x.code != "1").Get();

  
模糊查询

var users1 = conn.QuerySet<users>().Where(x => x.name.Contains("Y")).Get();


修改

var users=new users();          
users.name = Guid.NewGuid().ToString();
users.createDate = DateTime.Now;
int result = conn.CommandSet<users>().Where(x => x.id == 4).Update(users);


修改查询

 var users = conn.QuerySet<users>()
             .Where(x => x.name.Contains("Y"))
             .UpdateSelect(x => new users { name = "Y11" })
             .FirstOrDefault();


新增

  int result = conn.CommandSet<users>()
               .Insert(new users() { 
                       code = Guid.NewGuid().ToString(), 
                       name = "test", createWay = 1, 
                       createDate = DateTime.Now, 
                       roleId = 2 });

     
 删除

 int result = conn.CommandSet<users>()
              .Where(x => x.roleId == 2 && x.name == users2.name)
              .Delete();

如果想使用事务可以通过

conn.CommandSet<users>(事务对象) 

使用事务必须先手动打开数据库:conn.Open();

 


连表查询

Join<主表,副表>(主表关联字段,副表关联字段)

var list = conn.QuerySet<users>()
           .Where(x => x.code != "1")
           .Join<users, project_Role>(x => x.roleId, y => y.id)
           .ToList();

连表查询可以渲染成指定实体类,例如动态类型(dynamic)

var list = conn.QuerySet<users>()
           .Where(x => x.code != "1")
           .Join<users, project_Role>(x => x.roleId, y => y.id)
           .ToList<dynamic>();

翻页查询
 

//翻页查询第一页,10条数据
var list = conn.QuerySet<users>()
           .OrderBy(x => x.createDate)
           .PageList(1, 10);

//翻页连表查询返回dynamic
var list1 = conn.QuerySet<users>()
            .Join<users, project_Role>(x => x.roleId, y => y.id)
            .OrderBy(x => x.createDate)
            .PageList<dynamic>(1, 10);

多表任意联查         

 var users = conn.QuerySet<users>()
                        .Join<users, project_Role>((a, b) => a.roleId == b.id)
                        .Where<users, project_Role>((a, b) => a.id == 3 && b.id == 3)
                        .Get<dynamic>();

 

 Kogel.Dapper还支持linq和sql同时使用

已完成更加复杂查询条件或者连表关系,[详情请点击此处]

 

完整Demo可以去Github上下载:

https://github.com/a935368322/Kogel.Dapper.Test

如有问题也可以加QQ群讨论:

技术群 710217654

框架开源,可以加群下载源码


  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
博文地址: https://www.cnblogs.com/cl-blogs/p/10219126.html 简单栗子: [Test] public void 三表联表分页测试() { LockPers lpmodel = new LockPers() { Name = "%蛋蛋%", IsDel = false}; Users umodel = new Users() { UserName = "jiaojiao" }; SynNote snmodel = new SynNote() { Name = "%木头%" }; Expression<Func<LockPers, Users, SynNote, bool>> where = PredicateBuilder.WhereStart<LockPers, Users, SynNote>(); where = where.And((lpw, uw, sn) => lpw.Name.Contains(lpmodel.Name)); where = where.And((lpw, uw, sn) => lpw.IsDel == lpmodel.IsDel); where = where.And((lpw, uw, sn) => uw.UserName == umodel.UserName); where = where.And((lpw, uw, sn) => sn.Name.Contains(snmodel.Name)); DapperSqlMaker<LockPers, Users, SynNote> query = LockDapperUtilsqlite<LockPers, Users, SynNote> .Selec() .Column((lp, u, s) => // null) //查询所有字段 new { lp.Id, lp.InsertTime, lp.EditCount, lp.IsDel, u.UserName, s.Content, s.Name }) .FromJoin(JoinType.Left, (lpp, uu, snn) => uu.Id == lpp.UserId , JoinType.Inner, (lpp, uu, snn) => uu.Id == snn.UserId) .Where(where) .Order((lp, w, sn) => new { lp.EditCount, lp.Name, sn.Content }); var result = query.ExcuteSelect(); //1. 执行查询 WriteJson(result); // 打印查询结果 Tuple<StringBuilder, DynamicParameters> resultsqlparams = query.RawSqlParams(); WriteSqlParams(resultsqlparams); // 打印生成sql和参数 int page = 2, rows = 3, records; var result2 = query.LoadPagelt(page, rows, out records); //2. 分页查询 WriteJson(result2); // 查询结果 }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值