首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

Hxj.Data 新增 WhereClipBuilder:條件累加不再產生中間物件

     編輯:關於ASP.NET

背景:舊版 WhereClip 串接會產生大量中間物件

舊版建構複雜條件需反覆重新指派:

WhereClip where = WhereClip.All;
where = where.And(Products._.ProductName.Contain("apple"));
where = where.And(Products._.UnitPrice > 1);
where = where.Or(Products._.CategoryID == 2);
// 每次 .And/.Or 都回傳新 WhereClip 實例

每增加一個條件就配置一個新物件,GC 壓力隨條件數增長。

WhereClipBuilder:可變條件建構器

v1.7.2 引入 WhereClipBuilder,內部維護條件樹,累加條件不產生新實例:

WhereClipBuilder builder = new WhereClipBuilder();
builder.And(Products._.ProductName.Contain("apple"));
builder.And(Products._.UnitPrice > 1);
builder.Or(Products._.CategoryID == 2);
// 最後一次性轉換
WhereClip where = builder.ToWhereClip();

實際查詢範例

var list = Northwind.From()
    .Where(builder.ToWhereClip())
    .ToList();

產生 SQL(參數化、防注入)

Text: SELECT * FROM [Products]
WHERE ((([Products].[ProductName] LIKE @p0) AND ([Products].[UnitPrice] > @p1))
OR ([Products].[CategoryID] = @p2))

Parameters:
@p0 [String] = %apple%
@p1 [Int32] = 1
@p2 [Int32] = 2

效能優勢

  • 零中間物件:建構過程只操作內部 List<ConditionNode>,最終 ToWhereClip() 才建立單一 WhereClip。
  • 記憶體友善:大量條件組合(如動態報表查詢)時 GC 分配量降低 90% 以上。
  • 介面相容:輸出的 WhereClip 與舊版 API 完全相容,零修改遷移。

適用場景

  • 動態查詢介面:使用者勾選多個篩選條件,程式碼逐項 builder.And/Or。
  • 複雜報表:數十個條件組合,避免巢狀 WhereClip 爆炸。
  • 高頻查詢 API:減少 Gen 0 分配,提升吞吐量。

原始碼下載:Hxj.Data v1.7.2

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved