真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C#中的Lambda表達(dá)式怎么優(yōu)化

本篇內(nèi)容介紹了“C#中的Lambda表達(dá)式怎么優(yōu)化”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

為蓮湖等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及蓮湖網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為做網(wǎng)站、網(wǎng)站設(shè)計、蓮湖網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!

使用Lambda表達(dá)式將會造成Lambda表達(dá)式主題部分的代碼重復(fù).

var allEmployees = new List() { 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;

若每當(dāng)我們要獲取一次不同工薪階層的數(shù)據(jù).就要重復(fù)一次.相信久經(jīng)"高重用,松耦合"定律的你.肯定會想盡辦法將其實現(xiàn)高重用,松耦合.在以前方法調(diào)用的時代.可能你會將其提煉出

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

這樣,每次我們調(diào)用的時候,將大大減少代碼量,提高可復(fù)用性.

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

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

前面的<>里說過.編譯器會根據(jù)不同的LINQ Provider將Lambda表達(dá)式轉(zhuǎn)換成不同的內(nèi)容來執(zhí)行.對于LINQ to Object.將轉(zhuǎn)換成委托方法.而LINQ to SQL則是轉(zhuǎn)換成表達(dá)式數(shù).在數(shù)據(jù)迭代時才會轉(zhuǎn)換成SQL語句執(zhí)行.所以.若我們是在LINQ2SQL或ADO.Net EF中如此重構(gòu).編譯期通過了.但運行時將出錯.因為無法將你的自定義方法轉(zhuǎn)換成相關(guān)的SQL語句.,因此.將拋出一個異常.

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

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

這樣.只有在需要數(shù)據(jù)的時候,才會根據(jù)"步驟"得到相應(yīng)的數(shù)據(jù).對于IEnumerable,我們可以使用yield return來返回序列.

在復(fù)雜的查詢中服用Lambda表達(dá)式最有效的辦法就是封裝封閉泛型類型的查詢創(chuàng)建擴展方法.通過包含Lambda表達(dá)式的小方法疊加"步驟".從而達(dá)到最有效的優(yōu)化.

“C#中的Lambda表達(dá)式怎么優(yōu)化”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!


分享名稱:C#中的Lambda表達(dá)式怎么優(yōu)化
分享路徑:http://weahome.cn/article/gdpjdj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部