|
@@ -1,6 +1,3 @@
|
1
|
|
-
|
2
|
|
->Lambda表达式
|
3
|
|
-
|
4
|
1
|
在掌握Lambda表达式掌握几个概念。
|
5
|
2
|
>泛型
|
6
|
3
|
- 什么是泛型
|
|
@@ -17,7 +14,71 @@
|
17
|
14
|
- 泛型结构:struct Name<T>{}
|
18
|
15
|
|
19
|
16
|
- 泛型委托:public delegate void Name<T>(T param);
|
20
|
|
-
|
|
17
|
+- 数组、List和ArrayList的区别:
|
|
18
|
+ - 数组
|
|
19
|
+ - 在内存中是连续存储的,所以它的索引速度是非常的快,赋值与修改元素很简单
|
|
20
|
+ - 不足:(1)在数组的两个数据间插入数据也是很麻烦的;(2)声明数组时必须定义数组长度;数组过长会造成内存浪费,数组过短会造成数据溢出。
|
|
21
|
+ - 集合ArrayList:
|
|
22
|
+ - (1)ArrayList并非类型安全,(2)遍历ArrayList资源消耗大
|
|
23
|
+ - 装箱(boxing,指将值类型转换为引用类型)和拆箱(unboxing,指将引用类型转换为值类型)
|
|
24
|
+ - 泛型List:
|
|
25
|
+ -(1)类型安全,通过允许指定泛型类或方法操作的特定类型,泛型功能将类型安全的任务转移给了编译器。不需要编写代码来检测数据类型是否正确,因为会在编译时强制使用正确的数据类型。减少了类型强制转换的需要和运行时错误的可能性。(2)减少开销,泛型提供了类型安全但没有增加多个实现的开销。
|
|
26
|
+>扩展方法
|
|
27
|
+
|
|
28
|
+ 下面图片扩展方法都是针对IEnumerable的对象进行扩展的也就是说,只要实现了IEnumerable接口,就可以使用这些扩展方法。
|
|
29
|
+ ![](./imgs/操作符.jpg)
|
|
30
|
+
|
|
31
|
+>过滤操作符
|
|
32
|
+- Where:根据返回bool值的Func委托参数过滤元素。
|
|
33
|
+- OfType<TResult>:接收一个非泛型的IEnumerable集合,根据OfType泛型类型参数过滤元素,只返回TResult类型的元素。
|
|
34
|
+- Distinct:删除序列中重复的元素。
|
|
35
|
+
|
|
36
|
+>6.量词操作符
|
|
37
|
+- 如果元素序列满足指定的条件,量词操作符就返回布尔值。
|
|
38
|
+- 1)Any:确定序列是否包含任何元素;或确定序列中的任何元素是否都满足条件。
|
|
39
|
+- 2)All:确定序列中的所有元素是否满足条件。
|
|
40
|
+- 3)Contains:确定序列是否包含指定的元素。
|
|
41
|
+
|
|
42
|
+
|
21
|
43
|
> 委托
|
|
44
|
+- 委托就是动态调用方法
|
|
45
|
+
|
|
46
|
+
|
22
|
47
|
> 事件
|
23
|
|
-Lambda 表达式是一种可用于创建委托或表达式目录树类型的匿名函数。
|
|
48
|
+- 事件(Event)是类或对象向其他类或对象通知发生的事情的一种特殊签名的委托.
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+> Lambda表达式
|
|
52
|
+- Lambda 表达式是一种可用于创建委托或表达式目录树类型的匿名函数。
|
|
53
|
+- 例如DXKSH中的一个例子
|
|
54
|
+ ```
|
|
55
|
+ List<string> macs=await _projectDbContext.RealtimeDatas.Where(t => t.DianXiangId == request.DianXiangId)
|
|
56
|
+ .OrderByDescending(t=>t.Sort)//排序
|
|
57
|
+ .Select(t => t.mac).Distinct().ToListAsync();//去掉重复的mac号
|
|
58
|
+ ```
|
|
59
|
+- 查询数据的时候直接是使用以下箭头的形式来表示查询语句的:=>。例如,我们要查找学生的List<Student>集合中班级编号为1001的所有学生数据,我们即可用Studentlist.Where(t=>t.ClassCode=‘1001’)语句来直接完成
|
|
60
|
+- Lambda表达式的运算符即为=>。表达式形式:(Input Param)=>Expression。在表达式**左侧的表示输入参数**,**右侧的为相应的运算语句或者判断语句**等,可包含函数调用等复杂方式。运算符=>读作为goes to
|
|
61
|
+
|
|
62
|
+> 在List集合中Lambda表达式的使用
|
|
63
|
+- 此时举个例子
|
|
64
|
+```
|
|
65
|
+1)、studentList对象:List集合,集合中的对象为学生实体Student。此集合中存放着整个学校学生的信息
|
|
66
|
+2)、scoreList对象:集合中的对象是成绩实体Score,此集合中存放着为学生的成绩信息
|
|
67
|
+3)、Student实体:包含下列几个属性,StudentName,StudentCode,ClassCode,ClassName,BirthDay,Grade
|
|
68
|
+4)、Score实体:包含下列几个属性,StudentCode,SubjectName(科目名称),ScoreValue(分数,0-100的数字)。一个学生可能有多门成绩数据存放在此。
|
|
69
|
+```
|
|
70
|
+
|
|
71
|
+ (1)查询班级编号为1001的班级下面的所有学生实体并返回到list1001中存储
|
|
72
|
+ ```
|
|
73
|
+ var list1001=Studentlist.Where(t=>t.ClassCode==‘1001’);
|
|
74
|
+ ```
|
|
75
|
+(2)查询班级编号为1001的班级下面的所有学生实体并返回到list1001中存储,并按照学生的出生日期从小到大排列。
|
|
76
|
+```
|
|
77
|
+var list1001=Studentlist.Where(t=>t.ClassCode==‘1001’).OrderBy(t=>t.BirthDay);
|
|
78
|
+OrderBy是从小到大排序,需要从大到小排列则用OrderByDescending。
|
|
79
|
+
|
|
80
|
+ var h = studentList.Select(t => t.StudentName).Distinct();//获取所有的学生姓名,并去除重名
|
|
81
|
+```
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
|