SQLSugar動態拼接Lambda表達式(順便提一個sqlsugar框架的bug)


 .netcore項目使用了ORM實體映射的方式,通過操作實體類進行數據庫交互。

SQLSugar其中涉及動態表以及動態列的問題,請參考zwb我總結的一點心得,簡單明了:

動態表--相同列名不同表,可使用一個實體類映射。查詢代碼寫法:this.Queryable<D_PRJ>().AS("D_PRJ"+UNITSYS). 增刪改查皆可以。

 

動態列--傳統的list.where(p=>p.xx=="zwb")這種lambda表達式的寫法已經不能滿足 xx是個字符串變量的情況,而通過實體屬性反射來處理如下:

list.where(p=>p.GetType().GetProperty("xx").GetValue().ToString()=="aa")在LinQ中好用,但sqlsugar並不支持。那么如何通過sqlsugar解決動態列的問題呢?請大家繼續往下看:
http://www.codeisbug.com/Doc/8/1127這是官網示例。代碼使用場景:

 

 

 

對List<ConditionalModel>集合的ADD添加的條件之間的關系是and的關系

但當我們想tidi把一些條件用or的關系連接在一起怎么處理?官網中用到了conditionalCollections(){}

這個所謂的集合就相當於sql里的括號,可以將幾個條件括在里面,里面的條件可以用or連接,避免與外面條件的耦合,其中wheretype可以是or或者and

 

最后提一個sqlsugar的Bug,我覺得sqlsugar開發者還不知道這個問題吧。不愛打字了 直接上圖吧:

 

 

 

如果我們進行搜索條件拼裝時,檢索條件多個時,會導致oracle錯誤。當我們輸入一個條件模糊查詢時候可以,多個條件模糊查詢就報錯為什么呢?如下:

 

 

如上圖:實際我們用代碼動態拼接的所有條件在sqlsugar內部是這樣為我們生成可執行sql語句的,它會為每一個參數設置一個動態形成的參數名稱,名稱組成如下:固定前綴+列名+流水號后綴。

最后的流水號是動態生成的,參數越多,流水號越大,當這個參數長度超過30的時候,oracle就會報上面那個錯誤。

 

遇到問題要解決,這明顯是sqlsugar內部機制的bug問題,但坑還要有人填。填坑很簡單,動態循環自己拼接where條件吧,雖然我一向並不建議在sqlsuger中寫sql語句,但是沒辦法。

 

 

 

http://www.codeisbug.com/Doc/8/1127

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM