一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

擴展LINQ to SQL:使用Lambda Expression批量刪除數據

ORM框架在刪除數據方面一直有個尷尬,那就是無法通過指定條件批量刪除數據(當然這本不是ORM的問題,只是使用上感覺不方便)。于是對于一些刪除操作,我們不得不寫SQL語句或者執行存儲過程,例如:

ItemDataContext db = new ItemDataContext();db.ExecuteCommand(    "DELETE FROM Item WHERE [CreateTime] < {0}",    DateTime.UtcNow.AddMonths(-1));

我始終認為,在程序里出現直接的SQL語句是一件很丑陋的事情。在我看來,數據庫操作應該被封裝起來,而對于應用層的開發人員來說,眼中應該只有對象——退一步的話也可向數據庫發送指令(就是使用存儲過程)。當然,這是理想狀態,值得追求,但不可強求。幸運的是C# 3.0所擁有的強大特性足以讓我們對LINQ to SQL的功能進行擴展。為了更好地進行項目開發,以及周五的一次技術交流,我為LINQ to SQL擴展了批量刪除功能。當項目中引用了這個擴展之后,我們就可以使用如下的代碼來實現上面的功能了:

ItemDataContext db = new ItemDataContext();db.Items.Delete(item => item.CreateTime < DateTime.UtcNow.AddMonths(-1));

當然,擴展還支持更復雜的刪除條件,例如:

ItemDataContext db = new ItemDataContext();db.Items.Delete(item =>    item.CreateTime < DateTime.UtcNow.AddMonths(-1) ||    item.ViewCount < item.CommentCount && item.UserName != "jeffz"); 

之前我對于LINQ to SQL的擴展大都基于DataContext,不過很明顯,這次的擴展是基于Table<T>的??偟膩碚f,這個擴展比我想象中要簡單不少。針對LINQ的擴展最麻煩的地方就在于解析表達式樹(Expression Tree),而這個擴展關鍵的就是二元表達式(BinaryExpression),除了這點就沒有太大問題了——當然,這也是因為我放棄了對于復雜表達式樹的解析,例如現在就不支持“item.Introduction.Length < 10”這種條件,而對于更完整的解析方式來說,應該將其轉化為T-SQL中的LEN函數。

這個擴展的關鍵在于根據表達式樹生成Where Condition,我使用三個步驟完成這個擴展,大家可以關注代碼里的相關實現(如果需要的話我也可以在以后進行說明):

  1. 使用PartialEvaluator將表達式中的常量直接計算出來(例如“3 * 3”表達式將被替換為“9”),同時也會將一些存儲在變量中的值使用常量進行替換。
  2. 使用ConditionBuilder將表達式中的常量收集起來,并生成帶參數的Condition表達式(例如“[CreateTime] < {0} AND [UserName] <> {1}”)。
  3. 使用DataContext.ExecuteCommand方法執行完整的SQL語句。

有了批量刪除的功能,那么還缺點什么呢?那自然就是批量更新的功能了。批量更新的功能比刪除略為復雜一些,我正在開發之中。在有了這個擴展之后,我們就可以使用如下的方法進行批量更新了:

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

您可以點擊這里下載我對批量刪除的擴展。

it知識庫擴展LINQ to SQL:使用Lambda Expression批量刪除數據,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 国产精品每日在线观看男人的天堂 | 欧洲在线观看在线视频吗 | 普通话对白国产情侣自啪 | 啪啪伊人网 | 婷婷影院在线综合免费视频 | 精品国产一区二区三区麻豆小说 | 免费91麻豆精品国产自产在线观看 | 激情5月婷婷 | 欧美怡红院免费全视频 | 国产91精品高跟丝袜在线 | 国产精品亚洲专一区二区三区 | 天天成人| 女性毛片| 亚洲天堂久久精品 | 欧美岛国 | 99国产精品 | 天干天干夜天干天天爽 | 精品国产第一国产综合精品 | 亚洲图片一区二区三区 | 亚洲一区二区三区在线播放 | 国产小视频在线免费观看 | 国产免费精彩视频 | 国产精品视频九九九 | 伊人久久网站 | 国产在线每日更新 | 欧美一级一片 | 怡红院视频在线观看最新 | 美女黄色在线观看 | 男人女人黄 色一视频一级 男人女人无遮掩免费视频 男人女人做刺激视频免费 男人让女人爽的免费视频 男人日女人的免费视频 | 青青草色久综合网 | 97影院午夜在线观看视频 | 欧美另类videosgrstv变态 欧美另类xxx | 久久91精品综合国产首页 | 亚洲欧洲日产国码 最新 | 中文一区二区视频 | 岛国大片在线免费观看 | 国产精品青草久久久久福利99 | 免费91视频 | 天天舔天天爱 | 69视频在线观看 | 久久女人天堂 |