借助表示式樹感受不一樣的CRUD

2022-01-10 09:09:25 字數 1433 閱讀 6515

最近有個想法,想不寫 sql 語句,做乙個類似於 orm 的東西,自己解析表示式樹,生成要執行的 sql 語句,最後再執行 sql 語句,返回相應結果。

常用的 sql 語句基本都有一定的模式,就是insert/delete/update/select,我把公用的部分給抽離出來,把查詢/更新/刪除條件和指定字段通過表示式樹來指出,解析傳入的表示式樹物件來獲取條件以及要更新的字段。

原始碼鏈結

請看使用示例:

安裝 nuget 包wihanli.common

public static class repositorytest

);var entity = repo.fetch(t => t.pkid == 1);

system.console.writeline(entity.token);

repo.update(t => t.pkid == 1, t => t.token, 1);

entity = repo.fetch(t => t.pkid == 1);

system.console.writeline(entity.token);

repo.delete(t => t.pkid == 1);

entity = repo.fetch(t => t.pkid == 1);

system.console.writeline($"delete operation ");

repo.execute("truncate table dbo.tabtestentity");

console.writeline("finished.");

}public class dbconnectionpool : defaultobjectpool

public dbconnectionpool(ipooledobjectpolicypolicy, int maximumretained) : base(policy, maximumretained)

}public class dbconnectionpoolpolicy : ipooledobjectpolicy

public dbconnection create()

public bool return(dbconnection obj)

}[table("tabtestentity")]

internal class testentity

public string token

public datetime createdtime

}}

示例使用了 objectpool 實現了乙個資料庫連線池,repository例項化需要乙個獲取 dbconnection 物件的委託,而資料庫連線就是從這資料庫連線池中獲取。

一樣的寒假不一樣的感受

今天收到明天就放假的通知後,心裡頗不寧靜,短暫的寒假又要結束了。一樣的寒假不一樣的感受!時間管理 寒假剛開始的時候也向以前放假一樣用番茄時鐘,半個小時學習25分鐘,休息5分鐘 用了幾天後發現自己不用番茄時鐘,學習和休息之間也能處理的不錯就沒有用番茄時鐘了。學習英語的時間是固定的,上午8 00 10 ...

不一樣的編碼風格 Lambda表示式

lambda表示式也是c 3.0中最重要的特性之一。1 lambda表示式的簡介 lambda表示式可以理解為乙個匿名方法,它可以包含表示式和語句,並且用於建立委託或轉換為表示式樹。在使用lambda表示式時,都會使用 運算子,該運算子的左邊是匿名方法的輸入引數,右邊則是表示式或語句塊。1.1 la...

不一樣又不一樣的 木板接水

空地上豎立著n個從左到右排列的木板,它們可以把水擋住,但溢位最邊上木板的水將會流到空地上。已知木板間距都是單位1,現給定每個木板的高度,請求出總共能接住的水量?說明一點,這裡只考慮間距 寬度 和高度,不考慮第三個維度,因此水量是平方單位。木板高度分別是2,1,3,那麼我們可以接住2 2 4平方單位的...