中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C# Lambda Expression怎么用

發布時間:2021-11-03 14:15:41 來源:億速云 閱讀:151 作者:小新 欄目:編程語言

這篇文章主要介紹了C# Lambda Expression怎么用,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

我們處理一些刪除操作,會選擇寫SQL語句或者執行存儲過程,例如:

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

C# Lambda Expression的出現

在程序里出現直接的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>的。總的來說,這個擴展比我想象中要簡單不少。針對LINQ的擴展最麻煩的地方就在于解析表達式樹(Expression Tree),而這個擴展關鍵的就是二元表達式(BinaryExpression),除了這點就沒有太大問題了——當然,這也是因為我放棄了對于復雜表達式樹的解析,例如現在就不支持“item.Introduction.Length < 10”這種條件,而對于更完整的解析方式來說,應該將其轉化為T-SQL中的LEN函數。

C# Lambda Expression的使用:

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

◆使用PartialEvaluator將表達式中的常量直接計算出來(例如“3 * 3”表達式將被替換為“9”),同時也會將一些存儲在變量中的值使用常量進行替換。

◆使用ConditionBuilder將表達式中的常量收集起來,并生成帶參數的Condition表達式(例如“[CreateTime] < {0} AND [UserName] <> {1}”)。

◆使用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 /* 更新條件 */);

感謝你能夠認真閱讀完這篇文章,希望小編分享的“C# Lambda Expression怎么用”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

双峰县| 高阳县| 伊宁县| 平潭县| 全椒县| 太仓市| 吴旗县| 遵义市| 杭锦旗| 阿克苏市| 合江县| 光泽县| 山东| 长泰县| 碌曲县| 海安县| 叙永县| 天峻县| 鄄城县| 陇川县| 方山县| 龙游县| 武陟县| 长沙市| 绥江县| 红原县| 吴旗县| 清远市| 潜江市| 铜陵市| 晋中市| 曲靖市| 高州市| 珠海市| 松原市| 涿鹿县| 云龙县| 信阳市| 东丽区| 萨迦县| 泰州市|