在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。

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

     (a,b)=>a==b

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

   (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中存储

 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。

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

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

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

  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 == "");//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表达式的总结大致如此,从上述例子来看,可以大大简化代码的量,并增加可读性。

最后,附上博主的个人博客站点,更多的文章在博主的个人站点中,欢迎各位同行来进行指导交流,可点击下列链接进入博主网站:IT技术小屋

    博主个人技术交流群:960640092,博主微信公众号如下,可免费阅读云服务器运维知识。

C#编写的扫雷游戏源码(完整解决方案源码,可以直接编译运行):https://pan.baidu.com/s/1T4zVndyypzY9i9HsLiVtGg。提取码请关注博主公众号后,发送消息:扫雷源码。

C#中Lambda表达式总结的更多相关文章

  1. Java8中Lambda表达式的10个例子

    Java8中Lambda表达式的10个例子 例1 用Lambda表达式实现Runnable接口 //Before Java 8: new Thread(new Runnable() { @Overri ...

  2. VS编译环境中TBB配置和C++中lambda表达式

    TBB(Thread Building Blocks),线程构建模块,是由Intel公司开发的并行编程开发工具,提供了对Windows,Linux和OSX平台的支持. TBB for Windows ...

  3. Java中lambda表达式详解

    原文地址:http://blog.laofu.online/2018/04/20/java-lambda/ 为什么使用lambda 在java中我们很容易将一个变量赋值,比如int a =0;int ...

  4. Java8 Collections.sort()及Arrays.sort()中Lambda表达式及增强版Comparator的使用

    摘要:本文主要介绍Java8 中Arrays.sort()及Collections.sort()中Lambda表达式及增强版Comparator的使用. 不废话直接上代码 import com.goo ...

  5. Spark中Lambda表达式的变量作用域

    通常,我们希望能够在lambda表达式的闭合方法或类中访问其他的变量,例如: package java8test; public class T1 { public static void main( ...

  6. python中lambda表达式应用

    对于简单的函数,也存在一种简便的表示方式,即:lambda表达式 #普通函数1 def func(a): return a+1 print 'test1_func0:',func(1000)4#lam ...

  7. Python中lambda表达式学习

    lambda只是一个表达式,函数体比def简单很多. lambda的主体是一个表达式,而不是一个代码块.仅仅能在lambda表达式中封装有限的逻辑进去. lambda表达式是起到一个函数速写的作用.允 ...

  8. java 8 中lambda表达式学习

    转自 http://blog.csdn.net/renfufei/article/details/24600507 http://www.jdon.com/idea/java/10-example-o ...

  9. Java中Lambda表达式的使用

    简介(译者注:虽然看着很先进,其实Lambda表达式的本质只是一个"语法糖",由编译器推断并帮你转换包装为常规的代码,因此你可以使用更少的代码来实现同样的功能.本人建议不要乱用,因 ...

  10. .net中LAMBDA表达式常用写法

    这里主要是将数据库中的常用操作用LAMBDA表达式重新表示了下,用法不多,但相对较常用,等有时间了还会扩展,并将查询语句及LINQ到时也一并重新整理下: 1.select语句:books.Select ...

随机推荐

  1. centos7下载

    http://archive.kernel.org/centos-vault/7.0.1406/isos/x86_64/

  2. Something of HTTP

    学习发现所需且所欠知识: 参考:  1.一堆博客   2.HTTP图解(链接奉上,自取)提取码: n6jq http简介 http返回状态码 http方法(点击查看) GET POST PATCH H ...

  3. 移动端web轮播图插件swiper,功能很强大

    使用方法示例: <div class="swiper-container"> <div class="swiper-wrapper"> ...

  4. instr()函数--支持模糊查询

    1)instr()函数的格式  (俗称:字符查找函数) 格式一:instr( string1, string2 )    /   instr(源字符串, 目标字符串) 格式二:instr( strin ...

  5. 算法竞赛新编??---WERTYU,UVa10082

    P47 例题:3-2  WERTYU,UVA10082 注:作者的想法是找出输入字符在常量数组中的位置(使用for( i = 1; s[i] && s[i] != c;i++);语句来 ...

  6. 7. The British Thached Roof 英国的茅草屋顶

    7. The British Thached Roof 英国的茅草屋顶 (1) The view over a valley of a tiny village with thatchd roof c ...

  7. sql pivot(行转列) 和unpivot(列转行)的用法

    1.PIVOT用法(行转列) select * from Table_Score as a pivot (sum(score) for a.name in ([语文],[数学],[外语],[文综],[ ...

  8. python基本数据类型之字典

    python基本数据类型之字典 python中的字典是以键(key)值(value)对的形式储存数据,基本形式如下: d = {'Bart': 95, 'Michael': 34, 'Lisa': 5 ...

  9. navicat for mysql安装与破解

    Windows系统的电脑 navicat for mysql 的安装软件以及破解包 方法/步骤     从网上下载需要用到的navicat for mysql 的安装软件以及破解包.   双击navi ...

  10. ASP.NET Core 统一异常处理和返回

    业务场景: 业务需求要求,需要对 ASP.NET Core 异常进行统一处理和返回,比如出现 500 错误和业务服务错误进行不同的处理和返回. 具体实现: using Microsoft.AspNet ...