<strike id="suge2"></strike>
  • <tfoot id="suge2"></tfoot>
    <ul id="suge2"><sup id="suge2"></sup></ul>
    <ul id="suge2"><sup id="suge2"></sup></ul>
    <fieldset id="suge2"><input id="suge2"></input></fieldset>
    <ul id="suge2"><sup id="suge2"></sup></ul>
  • <ul id="suge2"></ul>

    南京軟件定制開發

    南京傾心軟件歡迎您訪問本站

    13605185909

    新聞資訊

    NEWS CENTER
    欄目導航

    南京軟件開發之Lambda表達式

    發布時間:Mar 18, 2021         已有 人瀏覽

           在C#的語法中有一種比較特殊的寫法,叫做Lambda表達式,這種表達式的寫法在于你查詢數據的時候直接是使用以下箭頭的形式來表示查詢語句的:=>。例如,我們要查找學生的List<Student>集合中班級編號為1001的所有學生數據,我們即可用Studentlist.Where(t=>t.ClassCode=‘1001’)語句來直接完成,無需再寫繁瑣的foreach語句或者for循環。Lambda表達式的運算符即為=>。

    一、Lambda表達式定義

            Lambda表達式實際上是一種匿名函數,在Lambda表達式中可以包含語句以及運算等操作。并且可用于創建委托或表達式目錄樹類型,支持帶有可綁定到委托或表達式樹的輸入參數的內聯表達式。使用Lambda表達式可大大減少代碼量,使得代碼更加的優美、簡潔,更有可觀性。

     

    二、Lambda表達式的表現形式

           表達式形式:(Input Param)=>Expression。在表達式左側的表示輸入參數,右側的為相應的運算語句或者判斷語句等,可包含函數調用等復雜方式。運算符=>讀作為goes to,例如下面這個表達t=>t.ClassCode='1001',多做goes to ClassCode equal 1001。

           在上述的表達式中,僅僅只有當參數只有一個的時候,括號是可選擇的,例如下面這種含有兩個參數時候的情況應該是這樣子的寫法

    1
    (a,b)=>a==b

      當表達式中的多個參數編譯器無法自動判斷類型的時候,則需要顯式指定類型。

    1
    (int firstIndex, string str) => str.IndexOf('Hello') > firstIndex

     

    三、下面介紹List集合中的Lambda表達式的運用

           在C#的List集合中,我們時常需要使用到大量的運算或者篩選等操作,按常規的方式無非就是利用foreach或者for對List集合進行循環操作,最后運算出結果。此種方法往往需要寫多行語句,閱讀性稍微差點,當然復雜的情況下編寫也費時。博主遇到這種情況一般比較喜歡偷懶,很少會去直接寫循環,而是直接使用Lambda表達式一條語句完成。

         先假定好我們待會使用的范例的格式:

         studentList對象:此對象是一個List集合,集合中的對象為學生實體Student。此集合中存放著整個學校學生的信息。

         scoreList對象:此對象是個List集合,集合中的對象是成績實體Score,此集合中存放著為學生的成績信息。

         Student實體:此實體包含下列幾個屬性,StudentName,StudentCode,ClassCode,ClassName,BirthDay,Grade。以上幾個英文單詞都比較簡單,就不做解釋了。

         Score實體:此實體包含下列幾個屬性,StudentCode,SubjectName(科目名稱),ScoreValue(分數,0-100的數字)。一個學生可能有多門成績數據存放在此。

        (1)查詢班級編號為1001的班級下面的所有學生實體并返回到list1001中存儲

    1
    var list1001=Studentlist.Where(t=>t.ClassCode==‘1001’);

     (2)查詢班級編號為1001的班級下面的所有學生實體并返回到list1001中存儲,并按照學生的出生日期從小到大排列。

    1
    var list1001=Studentlist.Where(t=>t.ClassCode==‘1001’).OrderBy(t=>t.BirthDay);

       在此說一下,OrderBy是從小到大排序,需要從大到小排列則用OrderByDescending。

     (3)查詢班級編號為1001的班級下面的姓氏為【李】的同學的所有集合,并按照學生的出生日期從小到大排列。

    1
    var list1001=Studentlist.Where(t=>t.ClassCode==‘1001’&&t.StudentName.StartWith(“李”)).OrderBy(t=>t.BirthDay);

     (4)查詢出班級編號為1001的班級,并且存在至少一門考試科目成績低于60分的所有同學。

    1
    var result = studentList.Where(t => (t.ClassCode == "1001") && (scoreList.Exists(p => p.ScoreValue < 60 && p.StudentCode == t.StudentCode)));

      在上述語句中,lambda表達式中再次嵌入了一個lambda表達式。t參數是studentList中的lambda表達式參數,代表實體為student。p參數為scoreList中的lambda表達式參數,代表的實體為score。

       (5)其他較常用的Lambda表達式如下:

    復制代碼
     var a = studentList.FirstOrDefault(t => t.StudentCode == "10012");//FirstOrDefault返回第一個符合條件的數據,不存在的時候返回Null。
     var b = studentList.Count(t => t.StudentName == "傾心");//返回符合條件的實體個數
     var c = studentList.FindAll(t => t.StudentName.Contains(""));//查找所有名字中含有【中】的實體集合
     var d = studentList.GroupBy(t => t.ClassCode);//對studentList按照ClassCode分組
     var f = studentList.Max(t => t.BirthDay);//返回最大的出生日期。
     var e = scoreList.Sum(t => t.ScoreValue);//對所有成績求和
     var g = scoreList.Average(t => t.ScoreValue);//對所有成績求平均分
     var h = studentList.Select(t => t.StudentName).Distinct();//獲取所有的學生姓名,并去除重名
    復制代碼

     

        Lambda表達式的總結大致如此,從上述例子來看,可以大大簡化代碼的量,并增加可讀性。

    Copyright © 2020-2022 南京傾心軟件技術有限公司 版權所有     蘇ICP備2020070309號-1
    QQ在線咨詢
    13605185909
    返回頂部
    亚洲av日韩精品久久久久久a| 69久久夜色精品国产69小说| 国产av无码专区亚洲国产精品| 日韩精品无码专区免费播放| 国产成人精品实拍在线| 国内一级特黄女人精品毛片| 亚洲精品欧美综合四区| 亚洲精品一二三区| 精品一二三区久久aaa片| 亚洲精品国产第1页| 亚洲精品国产啊女成拍色拍| 精品人妻中文字幕有码在线 | 91精品国产自产在线老师啪| 欧洲精品色在线观看| 久久一区二区三区精品| 久久夜色精品国产尤物| 久久精品夜色国产亚洲av| 亚洲国产第一站精品蜜芽| 日本精品久久久中文字幕| 国产精品99精品久久免费| 亚洲欧洲日韩国产| 日韩精品一区二区三区视频 | 精品在线视频一区| 亚洲日韩AV一区二区三区中文 | 日韩在线看片中文字幕不卡| 亚洲精品国产日韩| 亚洲日韩精品A∨片无码| 日韩AV无码中文无码不卡电影| 亚洲日韩精品一区二区三区 | 99热这里只有精品99| 99久久99久久精品| 在线人成精品免费视频| 久久成人国产精品免费软件| 亚洲成a人片在线观看精品 | 国产AV国片精品一区二区| 国产精品无码专区在线观看| 精品国产成人在线| 日韩精品无码视频一区二区蜜桃| 国内精品久久久久影院日本| 久久这里只精品国产免费10| 亚洲第一精品在线视频|