Session

Lamdba 表达式

电脑版发表于:2021/3/11 11:45

 在上述的表达式中,仅仅只有当参数只有一个的时候,括号是可省略的,例如下面这种含有两个参数时候的情况应该是这样子的写法

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

  当表达式中的多个参数编译器无法自动判断类型的时候,则需要显式指定类型。

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

 在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();//获取所有的学生姓名,并去除重名


关于TNBLOG
TNBLOG,技术分享。技术交流:群号677373950
ICP备案 :渝ICP备18016597号-1
App store Android
精彩评论
{{item.replyName}}
{{item.content}}
{{item.time}}
{{subpj.replyName}}
@{{subpj.beReplyName}}{{subpj.content}}
{{subpj.time}}
猜你喜欢