在掌握Lambda表达式掌握几个概念。
泛型
- 什么是泛型 泛型:是具有占位符(类型参数)的类、结构、接口和方法,这些占位符是类、结构、接口和方法所存储或使用的一个或多个占位符。
自我理解:类、接口、委托、结构或方法中有类型参数就是泛型类型,
泛型声明
泛型类: class Name{}
泛型方法: void Name(T t){}
泛型接口:interface IName{}
泛型结构:struct Name{}
泛型委托:public delegate void Name(T param);
数组、List和ArrayList的区别:
下面图片扩展方法都是针对IEnumerable的对象进行扩展的也就是说,只要实现了IEnumerable接口,就可以使用这些扩展方法。
![](./imgs/操作符.jpg)
过滤操作符
- Where:根据返回bool值的Func委托参数过滤元素。
- OfType:接收一个非泛型的IEnumerable集合,根据OfType泛型类型参数过滤元素,只返回TResult类型的元素。
- Distinct:删除序列中重复的元素。
6.量词操作符
- 如果元素序列满足指定的条件,量词操作符就返回布尔值。
- 1)Any:确定序列是否包含任何元素;或确定序列中的任何元素是否都满足条件。
- 2)All:确定序列中的所有元素是否满足条件。
- 3)Contains:确定序列是否包含指定的元素。
委托
- 委托就是动态调用方法
事件
- 事件(Event)是类或对象向其他类或对象通知发生的事情的一种特殊签名的委托.
Lambda表达式
- Lambda 表达式是一种可用于创建委托或表达式目录树类型的匿名函数。
- 例如DXKSH中的一个例子
List<string> macs=await _projectDbContext.RealtimeDatas.Where(t => t.DianXiangId == request.DianXiangId) .OrderByDescending(t=>t.Sort)//排序 .Select(t => t.mac).Distinct().ToListAsync();//去掉重复的mac号
- 查询数据的时候直接是使用以下箭头的形式来表示查询语句的:=>。例如,我们要查找学生的List集合中班级编号为1001的所有学生数据,我们即可用Studentlist.Where(t=>t.ClassCode=‘1001’)语句来直接完成
- Lambda表达式的运算符即为=>。表达式形式:(Input Param)=>Expression。在表达式左侧的表示输入参数,右侧的为相应的运算语句或者判断语句等,可包含函数调用等复杂方式。运算符=>读作为goes to
在List集合中Lambda表达式的使用
- 此时举个例子
1)、studentList对象:List集合,集合中的对象为学生实体Student。此集合中存放着整个学校学生的信息 2)、scoreList对象:集合中的对象是成绩实体Score,此集合中存放着为学生的成绩信息 3)、Student实体:包含下列几个属性,StudentName,StudentCode,ClassCode,ClassName,BirthDay,Grade 4)、Score实体:包含下列几个属性,StudentCode,SubjectName(科目名称),ScoreValue(分数,0-100的数字)。一个学生可能有多门成绩数据存放在此。
(1)查询班级编号为1001的班级下面的所有学生实体并返回到list1001中存储
var list1001=Studentlist.Where(t=>t.ClassCode==‘1001’);
(2)查询班级编号为1001的班级下面的所有学生实体并返回到list1001中存储,并按照学生的出生日期从小到大排列。
var list1001=Studentlist.Where(t=>t.ClassCode==‘1001’).OrderBy(t=>t.BirthDay);
OrderBy是从小到大排序,需要从大到小排列则用OrderByDescending。
var h = studentList.Select(t => t.StudentName).Distinct();//获取所有的学生姓名,并去除重名