舊版建構複雜條件需反覆重新指派:
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 壓力隨條件數增長。
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();
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。WhereClip 與舊版 API 完全相容,零修改遷移。builder.And/Or。WhereClip 爆炸。原始碼下載:Hxj.Data v1.7.2