91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

C#中的Lambda表達式怎么優化

發布時間:2021-12-03 10:22:16 來源:億速云 閱讀:159 作者:iii 欄目:編程語言

本篇內容介紹了“C#中的Lambda表達式怎么優化”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

使用Lambda表達式將會造成Lambda表達式主題部分的代碼重復.

var allEmployees = new List<Employee>() { new Employee { EmployeeId = 1, Classification = 1, FirstName = "Skin", LastName = "Sen" } };  var earlyFolks = from e in allEmployees  where e.MonthlySalary < 4000 && e.Classification == 1 && e.YearsOfService > 20  select e;

若每當我們要獲取一次不同工薪階層的數據.就要重復一次.相信久經"高重用,松耦合"定律的你.肯定會想盡辦法將其實現高重用,松耦合.在以前方法調用的時代.可能你會將其提煉出

private static bool LowPaidSalaried(Employee e, int salar)          {     return e.MonthlySalary < salar && e.Classification == 1;          }

這樣,每次我們調用的時候,將大大減少代碼量,提高可復用性.

var earlyFolks = from e in allEmployee      where LowPaidSalaried(e, 4000) && e.YearsOfService > 20      select e;

然而,很不幸的是.在這里.這種重構的方式反倒降低了其可重用性.實際上,***種方法的可重用性比第二種方法更高些.為什么呢?明明已經提煉出重用方法了.這與Lambda表達式的求值,解析以及最終的執行方式有關.

前面的<<LINQ表達式與方法調用的映射>>里說過.編譯器會根據不同的LINQ Provider將Lambda表達式轉換成不同的內容來執行.對于LINQ to Object.將轉換成委托方法.而LINQ to SQL則是轉換成表達式數.在數據迭代時才會轉換成SQL語句執行.所以.若我們是在LINQ2SQL或ADO.Net EF中如此重構.編譯期通過了.但運行時將出錯.因為無法將你的自定義方法轉換成相關的SQL語句.,因此.將拋出一個異常.

難道,Lambda表達式就只能重復再重復了嗎?當然不是.在這里.延遲執行很好的將其作用發揮得淋漓精致.前面說過.延遲執行保存的并不是值,而是獲取值的方法或者步驟.這樣,每次我們調用完"獲取"數據的方法.實際上.數據還沒獲得.得到的.只是一系列的"步驟".我們可以在步驟的的基礎上再添加步驟.這樣.就***的實現了Lambda下的重構.

public static IQueryable<Employee> LowPaidSalaried(this IQueryable<Employee> sequence)          {    return from s in sequence   where s.Classification == 1 && s.MonthlySalary < 4000                     select s;          }var allEmployees = FindAllEmployees();  var salaried = allEmployees.LowPaidSalaried();

這樣.只有在需要數據的時候,才會根據"步驟"得到相應的數據.對于IEnumerable<T>,我們可以使用yield return來返回序列.

在復雜的查詢中服用Lambda表達式最有效的辦法就是封裝封閉泛型類型的查詢創建擴展方法.通過包含Lambda表達式的小方法疊加"步驟".從而達到最有效的優化.

“C#中的Lambda表達式怎么優化”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

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

AI

德州市| 墨竹工卡县| 宁蒗| 永和县| 寿光市| 武安市| 财经| 承德市| 府谷县| 祁阳县| 都昌县| 娱乐| 绩溪县| 呼和浩特市| 乐山市| 莱芜市| 刚察县| 锡林郭勒盟| 镇坪县| 中西区| 龙游县| 东源县| 哈巴河县| 怀仁县| 仙居县| 许昌县| 建始县| 忻城县| 荔浦县| 美姑县| 庆云县| 绥芬河市| 韶山市| 黎城县| 北川| 琼结县| 顺昌县| 霍邱县| 顺平县| 新疆| 苍梧县|