菜的像徐坤
排名
7
文章
192
粉丝
15
评论
16
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

Lamdba 表达式

5188人阅读 2021/3/11 11:45 总访问:960230 评论:0 收藏:0 手机
分类: Csharp

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

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

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

1
  1. (
  1. int
 
  1. firstIndex, 
  1. string
 
  1. str) => str.IndexOf(
  1. 'Hello'
  1. ) > 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
  1. var
 
  1. list1001=Studentlist.Where(t=>t.ClassCode==‘1001’);

 (2)查询班级编号为1001的班级下面的所有学生实体并返回到list1001中存储,并按照学生的出生日期从小到大排列。

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

   在此说一下,OrderBy是从小到大排序,需要从大到小排列则用OrderByDescending。

 (3)查询班级编号为1001的班级下面的姓氏为【李】的同学的所有集合,并按照学生的出生日期从小到大排列。

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

 (4)查询出班级编号为1001的班级,并且存在至少一门考试科目成绩低于60分的所有同学。

1
  1. var
 
  1. result = studentList.Where(t => (t.ClassCode == 
  1. "1001"
  1. ) && (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();//获取所有的学生姓名,并去除重名


评价

C委托与Lamdba表达式入门以及Lamdba自己实现SelectMany等

?委托:l 什么委托: 本质是方法指针l 委托的作用: 作用:进行方法传递,方法可以当作一个参数进行传递,C#里边要传递...

根据委托和Lamdba表达式扩展方法

lamdba表达式ForEach扩展方法:public static void GetForEach&lt;T&gt;(this IEnumerable&lt;T&gt; list, Action&lt;T&gt;...

.NET MVC 中Lamdba实现left join

1、left join 用GroupJoin来实现,join的返回结果为一对一,GroupJoin返回结果为一对多,相当于集合中还有集合publicAction...

多表分组,排序,混合查询的linqLamdba语句

多表分组,排序,混合查询例如:显示每个人的父亲,对应的分数,考试的科数linq语句varquery=fromuinoae.users joinpinoae...

委托,事件Lamdba委托语句

C#委托与lamdba简介?委托:l 什么委托: 本质是方法指针l 委托的作用:作用:进行方法传递,方法可以当作一个参数进行传...

重要sql语句和linqLamdba分组条件查询语句

每天记录一点点我希望有个如你一般的人我希望有个如你一般的人,如山间清爽的风,如古城温暖的光,从清晨到夜晚,由山野到...

委托、系统委托、Lamdba表达式

委托:本质是方法指针&gt;作用:进行方法传递,方法可以当作一个参数进行传递与泛型作比较:泛型是把一个类型当作参数传递C...

系统委托和Lamdba表达式

系统委托什么是系统委托系统预先定义好的委托就叫系统委托系统委托的作用 简化使用委托,使用委托的时候不需要重复定义,直...

MVC Lamdba 三表left查询

//三表左链接查询 varlist2=oa.studdinfo.GroupJoin(oa.Score,a=&gt;a.Number,b=&gt;b.Number,(studdinfos,score)=&gt;new...

表达式树创建 Lamdba表达式

表达式树(关键字Expression&lt;Func&lt;对象, 数据类型&gt;&gt;)可以动态的拼接lamdba表达式//对象部分 publicclassTabl...

动态生成表达式树(Lamdba

前言我在为EF core 封装一个UpdateOrCreateAsync 的方法时,需要动态的Lamdba 来配合我方法///&lt;summary&gt; ///异步更...

js 搜索,筛选。 find与filter方法,Lamdba查询方法,类似.net中的where与FirstOrDefault方法

find()方法,用于找出第一个符合条件的数组成员,类似.net中FirstOrDefault方法。filter()方法使用指定的函数测试所有元素,...

正则表达式匹配中文标点符号

//匹配这些中文标点符号。?!,、;:“”‘&#39;()《》〈〉【】『』「」﹃﹄〔〕…—~﹏¥ varreg=/[\u3002|\uff1f|\...

无法计算表达式Microsoft.Build.Utilities

vs2013启动项目报错:无法计算表达式Microsoft.Build.Utilities右边vs然后点击兼容性,勾上以管理员身体允许此程序然后以兼...

扩展ef自动映射需要查询的字段(表达式树Expression),动态构建返回值

Entity Framework 动态构造select表达式比如我们需要返回某些字段会采用如下的写法但是发现每次都去写select如果字段很多不...