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

擴展 LINQ to SQL:Lambda Expression 批量刪除與更新實戰

     編輯:關於.NET

ORM 框架批量刪除一直是痛點:無法透過條件批量刪除,只能寫 SQL 或執行預存程序,程式碼中出現裸 SQL 顯得醜陋。利用 C# 3.0 強大特性擴展 LINQ to SQL,實現優雅的批量刪除與更新。

批量刪除擴展:基於 Table<T> 的 Delete 方法

引用擴展後:

ItemDataContext db = new ItemDataContext();
// 簡單條件
db.Items.Delete(item => item.CreateTime < DateTime.UtcNow.AddMonths(-1));

// 複雜條件
db.Items.Delete(item =>
    item.CreateTime < DateTime.UtcNow.AddMonths(-1) ||
    item.ViewCount < item.CommentCount && item.UserName != "jeffz");

實現三步驟

  1. PartialEvaluator:計算常量運算式 (如 3 * 3 → 9),替換變數引用為常量
  2. ConditionBuilder:收集常量、產生帶參數條件表達式 (如 [CreateTime] < {0} AND [UserName] <> {1})
  3. DataContext.ExecuteCommand:執行完整 SQL 陳述式

核心在解析表達式樹,重點處理 BinaryExpression。目前不支援複雜運算 (如 item.Introduction.Length < 10 需轉 T-SQL LEN 函數)。

批量更新擴展:Update 方法 (開發中)

ItemDataContext db = new ItemDataContext();
db.Items.Update(
    item => new Item
    {
        Introduction = item.Title + "Hello World",
        ViewCount = item.ViewCount + 1,
    },  // 更新方式
    item => item.CommentCount > 100  // 更新條件
);

批量更新比刪除複雜,正在開發中。原始碼可下載。

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