Lambda表达式

Lambda表达式属于一种匿名函数(无函数名的函数),在C#中,Lambda表达式都使用Lambda运算符“=>”,等于号右边连着大于号。运算符“=>”具有和赋值运算符(=)相同的优先级,并且是右结合运算符。Lambda表达式最常用的便是用于替换Linq查询语句,相当于是Linq查询的简写形式,虽然写法大相径庭,但它们查询出的数据结果是一致的。Lambda表达式写法:在运算符“=>”的左边填入参数m(有参数就填,无则不填),右边为表达式或语句(m => m.x),参数“m”为自定义参数,并不是说每次用到表达式就固定了参数值为m。

最常见的Linq单表查询写法:
PW_User dbUser = (from tbUser in myModel.PW_User
where tbUser.UserID == UserID
select tbUser).Single();

转换成Lambda表达式写法:
dbUser = dbUser.Where(m => m.UserID == UserID ).Single();

语句中用到了Linq中的Where方法,括号中的则是Lambda表达式。小括号中运算符前的参数m在里面表示的是Where前的dbUser(表对象),运算符后的 m.UserID == UserID 就是一个表达式,dbUser(表对象)中的.UserID需要 == UserID(视图层传递的参数),在执行完该表达式后返回结果值。

示例,将该部分Linq查询转换成表达式写法:
List《SelectVo》 listAcademe = (from tbAcademe in myModels.SYS_Academe
select new SelectVo
{
id = tbAcademe.AcademeID,
text = tbAcademe.AcademeName
}).ToList();

转换后的Lambda表达式写法:
List《Select》 listAcademe = myModels.SYS_Academe.Select(m => new Select {id = m.AcademeID,text = m.AcademeName}).ToList();

首先,Select之前的内容和Linq的写法一致,小括号中的第一个参数m代表的就是表对象SYS_Academe,new Select创建一份新的列表用于存放查询出的数据,接着便是给id & text逐一赋值,在对查询出来的数据进行赋值时,请记住要用方括号将赋值过程括起,然后我在前面也提到了,运算符【=>】前的参数 = 表对象,因此 m.AcademeID = 学院表中的学院ID,m.AcademeName = 学院表中的学院名称,以这样的形式进行赋值成功简化原Linq查询方法的整个过程。可以明显的看到原本要一大块代码段的查询方法,转换Lambda表达式后简写成两句代码就可以搞定的事情,是不是很方便呢?表达式本身的使用并不难,无须去钻牛角尖去想这个表达式为什么要以这样的格式写才可以获取到数据,它就是这样写的,我们要做的就是记好格式,懂得怎么去运用。
在这里插入图片描述
不同写法的查询都定义完成,剩下的就是测试了,让我们断个点来看看查询到的数据结果是否一致,还是说略有不同呢?

首先是Linq查询到的结果,总共查询到了30条学院数据,且数据类型都是列表格式的SelectVo实体类数据:
在这里插入图片描述
接着便是Lambda表达式查询到的结果,和Linq的结果一致,同样是查询到了30条数据,数据类型也是预料之中的一致:
在这里插入图片描述
因此,Lambda表达式的查询方法和Linq查询方法除了在写法上的不同外其结果和性质上是一致的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值