写点什么

扩展 ADO.net 实现对象化 CRUD(.net core/framework)

用户头像
Spook
关注
发布于: 1 小时前

扩展 ADO.net 实现对象化 CRUD(.net core/framework)

  1. <u>安装 nuget 包:CRL</u>

  2. <u>using CRL;</u>

实现数据操作

获取数据访问连接 IDbConnection dbConnection


通过扩展方法 GetDBExtend 获取 IAbsDBExtend 对象


    public IAbsDBExtend GetDBExtend()    {        return dbConnection.GetDBExtend(dbTrans);    }
复制代码


使用 IAbsDBExtend 实现对象化操作


var db = GetDBExtend();db.BatchInsert(new List<TestClass>() { new TestClass() { Id = DateTime.Now.Millisecond, Name = "ddddd" } },true);db.Update(b => b.Id == 1, new { Number = 2 });
复制代码


IAbsDBExtend 可以实现所有数据操作,如:


  1. 批量更新

  2. 批量删除

  3. 批量插入

  4. 存储过程

  5. 表字段、索引检查

实现查询

通过扩展方法**GetLambdaQuery<T>**获取 ILambdaQuery 对象


public ILambdaQuery<T> GetLambdaQuery<T>() where T : class        {            return dbConnection.GetLambdaQuery<T>(dbTrans);        }
复制代码


使用 ILambdaQuery 实现查询


var query = GetLambdaQuery<TestClass>();                query.Join<TestClass2>((a, b) => a.Id == b.Id);                query.PrintQuery();
复制代码


<u>ILambdaQuery 能实现子查询和嵌套查询,只要符合 T-SQL 语义逻辑,可以使用 ILambdaQueryResultSelect 无限叠加</u>


如:


  • join 后 group

  • join 后再 join

  • group 后再 join

  • join 一个 group 结果

  • join 一个 union 结果

  • 对 union 进行 group 再 join

  • ...


示例查询:


var q1 = GetLambdaQuery();            var q2 = q1.CreateQuery<Code.ProductData>();            q2.Where(b => b.Id > 0);            var view = q2.CreateQuery<Code.Member>().Where(b => b.Id > 0).GroupBy(b => b.Name).Select(b => new { b.Name, aa = b.Id.COUNT() });//GROUP查询            var view2 = q2.Join(view, (a, b) => a.CategoryName == b.Name).Select((a, b) => new { ss1 = a.UserId, ss2 = b.aa });//关联GROUP            q1.Join(view2, (a, b) => a.Id == b.ss1).Select((a, b) => new { a.Id, b.ss1 }).ToList();//再关联            //var result = view2.ToList();            var sql = q1.PrintQuery();
复制代码


源码示例参考


Data/QueryTest/test · hubroxxl/CRL - 码云 - 开源中国 (gitee.com)

用户头像

Spook

关注

还未添加个人签名 2021.06.24 加入

还未添加个人简介

评论

发布
暂无评论
扩展ADO.net实现对象化CRUD(.net core/framework)