基於Expression Lambda表達式樹的通用複雜動態查詢構建器——《構思篇一》[已開源]

来源:https://www.cnblogs.com/ls0001/archive/2023/05/25/17430038.html
-Advertisement-
Play Games

### GC 優化 #### 1.防止大對象Buffer到記憶體中 **現象**:當大包請求時,YGC 耗時嚴重 **原因**:預設情況下 Zuul2 並不會緩存請求體(DirectByteBuffer),也就意味著它會先發送接收到的請求 Headers 到後端服務,之後接收到請求體再繼續發送到後端服 ...


上一篇構思了把查詢子句描述出來的數據結構,那麼能否用代碼將其表達出來,如何表達呢?

再次回顧考察,看下麵的查詢子句:

Id>1 and Id<10

如上所示,有兩個獨立的條件分別為Id>1Id<10,用一個邏輯操作符 and 連接起來。

再看下麵這條,後面也是兩個獨立條件通過操作符or連接,並包在括弧里,作為一個整體

Id>1 and Id<10 and (Name="MyName" or Name="HisName")

可以看到當中包含幾種元素:欄位名稱,邏輯操作符,比較操作符,條件值,數據類型,括弧。兩個概念:獨立的條件和由括弧包將它們起來的整體

那麼可以設計兩個類來代表獨立條件和條件組,如下所示:

//獨立條件偽代碼:
public class Field
{
    public  enum Logical  {get;set;}      //與其它條件之間的邏輯關係  
    public  enum comparer {get;set;}      //條件比較符 
    public  Type DataType {get;set;}      //數據類型
    public  string FieldName  {get;set;}  //欄位名稱
    public  object QueryValue {get;set;}  //條件值
}

由於複雜的查詢的括弧是可嵌套的,多重組合的,類似下麵的還算簡單的子句:

(dept="mgr" or dept ="bi" ) and(Id>1 and Id<10 and (Name="MyName" or Name="HisName"))

那麼條件組裡就需要包含獨立條件和條件組,並且可嵌套,即組中有組:

//條件組偽代碼:
public class Block
{
    public  enum Logical  {get;set;}      //與其它條件組或獨立條件之間的邏輯關係  
    public  List<Field> Fields {get;}
    public  List<Block> Blocks {get;}
}

 

光文字看得似乎容易蒙逼,來張圖或者能輔助理解(圖示僅用來說明分組的層次):

  • 至此,把查詢條件用代碼描述出來的構思就暫告一段落了。

  • 欲瞭解更多,挖掘更多,敬待下期分解。

  • 隨手點個贊唄!
  • 下集預告。。。。。如何得到目標表達式

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 比如老王我,用npm init新建一個包,改把改把,然後來個npm publish,so easy ✌️!Too young too naive, baby
  • 在 CSS 中,存在許多數學函數,這些函數能夠通過簡單的計算操作來生成某些屬性值,例如 : * calc():用於計算任意長度、百分比或數值型數據,並將其作為 CSS 屬性值。 * min() 和 max():用於比較一組數值中的最大值或最小值,也可以與任意長度、百分比或數值型數據一同使用。 * c ...
  • 1.轉換 轉換(transform)是CSS3中具有顛覆性的特征之一,可以實現元素的位移、旋轉、縮放等效果。 轉換(transform)可以簡單理解為變形。 移動:translate 旋轉:rotate 縮放:scale 1.1 二維坐標系 2D轉換是改變在二維平面上的位置和形狀的一種技術。 1.2 ...
  • > 隨著人工智慧技術的不斷發展,阿裡體育等IT大廠,推出的“樂動力”、“天天跳繩”AI運動APP,讓**雲上運動會、線上運動會、健身打卡、AI體育指導**等概念空前火熱。那麼,能否將這些在APP成功應用的場景搬上小程式,分享這些概念的紅利呢?本系列文章就帶您一步一步從零開始開發一個AI運動小程式,本 ...
  • 相信很多公司的前端開發人員都會選擇使用vue+element-ui的形式來開發公司的管理後臺系統,基於element-ui很豐富的組件生態,我們可以很快速的開發管理後臺系統的頁面(管理後臺系統的頁面也不複雜,大多都是分頁查詢類需求和增刪改查)。但一個前端框架有優點,就必然會有一些缺點或bug存在,e... ...
  • 寫這篇的目的是,今天在重新學習javascript時發現了HttpOnly這個標簽,所以專門的mark了下。 誰在什麼時候發明瞭HttpOnly 2002年微軟為ie6的sp1創造了HttpOnly 什麼是HttpOnly HttpOnly是包含在http返回頭Set-Cookie裡面的一個附加的f ...
  • 本文將學習如何使用滾動控制 ScrollControls 來控制模型的的動畫播放和相機動畫,通過滾動滑鼠滾輪或者上下移動觸摸板,來控制模型的動畫播放進度或者相機的方位視角,從而呈現出驚艷的視覺效果。通過本文的閱讀和案例頁面的實現,你將學習到的知識包括:R3F 生態中的 ScrollControls、... ...
  • 如果你有 *n* 個緩存伺服器,一個常見的負載均衡方式是使用以下的哈希方法: *伺服器索引 = 哈希(鍵) % N*,其中 *N* 是伺服器池的大小。 讓我們通過一個例子來說明這是如何工作的。如表5-1所示,我們有4台伺服器和8個字元串鍵及其哈希值。 ![image-2023052022160981 ...
一周排行
    -Advertisement-
    Play Games
  • 1. 說明 /* Performs operations on System.String instances that contain file or directory path information. These operations are performed in a cross-pla ...
  • 視頻地址:【WebApi+Vue3從0到1搭建《許可權管理系統》系列視頻:搭建JWT系統鑒權-嗶哩嗶哩】 https://b23.tv/R6cOcDO qq群:801913255 一、在appsettings.json中設置鑒權屬性 /*jwt鑒權*/ "JwtSetting": { "Issuer" ...
  • 引言 集成測試可在包含應用支持基礎結構(如資料庫、文件系統和網路)的級別上確保應用組件功能正常。 ASP.NET Core 通過將單元測試框架與測試 Web 主機和記憶體中測試伺服器結合使用來支持集成測試。 簡介 集成測試與單元測試相比,能夠在更廣泛的級別上評估應用的組件,確認多個組件一起工作以生成預 ...
  • 在.NET Emit編程中,我們探討了運算操作指令的重要性和應用。這些指令包括各種數學運算、位操作和比較操作,能夠在動態生成的代碼中實現對數據的處理和操作。通過這些指令,開發人員可以靈活地進行算術運算、邏輯運算和比較操作,從而實現各種複雜的演算法和邏輯......本篇之後,將進入第七部分:實戰項目 ...
  • 前言 多表頭表格是一個常見的業務需求,然而WPF中卻沒有預設實現這個功能,得益於WPF強大的控制項模板設計,我們可以通過修改控制項模板的方式自己實現它。 一、需求分析 下圖為一個典型的統計表格,統計1-12月的數據。 此時我們有一個需求,需要將月份按季度劃分,以便能夠直觀地看到季度統計數據,以下為該需求 ...
  • 如何將 ASP.NET Core MVC 項目的視圖分離到另一個項目 在當下這個年代 SPA 已是主流,人們早已忘記了 MVC 以及 Razor 的故事。但是在某些場景下 SSR 還是有意想不到效果。比如某些靜態頁面,比如追求首屏載入速度的時候。最近在項目中回歸傳統效果還是不錯。 有的時候我們希望將 ...
  • System.AggregateException: 發生一個或多個錯誤。 > Microsoft.WebTools.Shared.Exceptions.WebToolsException: 生成失敗。檢查輸出視窗瞭解更多詳細信息。 內部異常堆棧跟蹤的結尾 > (內部異常 #0) Microsoft ...
  • 引言 在上一章節我們實戰了在Asp.Net Core中的項目實戰,這一章節講解一下如何測試Asp.Net Core的中間件。 TestServer 還記得我們在集成測試中提供的TestServer嗎? TestServer 是由 Microsoft.AspNetCore.TestHost 包提供的。 ...
  • 在發現結果為真的WHEN子句時,CASE表達式的真假值判斷會終止,剩餘的WHEN子句會被忽略: CASE WHEN col_1 IN ('a', 'b') THEN '第一' WHEN col_1 IN ('a') THEN '第二' ELSE '其他' END 註意: 統一各分支返回的數據類型. ...
  • 在C#編程世界中,語法的精妙之處往往體現在那些看似微小卻極具影響力的符號與結構之中。其中,“_ =” 這一組合突然出現還真不知道什麼意思。本文將深入剖析“_ =” 的含義、工作原理及其在實際編程中的廣泛應用,揭示其作為C#語法奇兵的重要角色。 一、下劃線 _:神秘的棄元符號 下劃線 _ 在C#中並非 ...