<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      代碼改變世界

      【More Effective C#】Lambda表達(dá)式優(yōu)化

      2010-10-19 08:09  空逸云  閱讀(4746)  評(píng)論(41)    收藏  舉報(bào)

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

      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;
      

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

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

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

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

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

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

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

      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();

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

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

      主站蜘蛛池模板: 国产精品视频中文字幕| 国产成人精品一区二区秒拍1o| 精品久久久久久久中文字幕| 亚洲码国产精品高潮在线| 波多野结av衣东京热无码专区| 色悠悠国产精品免费观看| 精品一区二区亚洲国产| 亚洲欧美高清在线精品一区二区| 久热这里有精品视频在线| 精精国产xxx在线观看| AV人摸人人人澡人人超碰| 国产成人啪精品视频免费软件| 色综合天天综合天天更新| 亚洲国产成人综合精品| 蜜臀久久精品亚洲一区| 国产日产亚洲系列av| 在线观看AV永久免费| 毛葺葺老太做受视频| 色呦呦 国产精品| 真实国产乱啪福利露脸| 一本一本久久a久久综合精品| 亚洲综合91社区精品福利| 少妇人妻偷人精品免费| 免费网站看sm调教视频| 老妇女性较大毛片| 少妇又爽又刺激视频| 华容县| 亚洲男人天堂2018| 国产精品推荐手机在线| 国产在线一区二区不卡| 自拍偷自拍亚洲精品播放| 天天影视色香欲综合久久| 亚洲AV无码破坏版在线观看| 免费人成网站免费看视频| 香港三级韩国三级日本三级| 精品偷拍一区二区三区| 欧美极品色午夜在线视频| 国产无套内射又大又猛又粗又爽| 国产精品综合色区av| 亚洲狠狠狠一区二区三区| 国产女高清在线看免费观看 |