擴充套件ADO.net實現物件化CRUD(.net core/framework)

  1. 安裝nuget包:CRL
  2. using CRL;

實現資料操作

獲取資料訪問連線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獲取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();

ILambdaQuery能實現子查詢和巢狀查詢,只要符合T-SQL語義邏輯,可以使用ILambdaQueryResultSelect無限疊加

如:

  • 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)