Linq专题之Lambda表达式
这一节我们讲的Lambda表达式跟匿名函数有关。Lambda表达式就是一个匿名函数,它可以包含表达式和语句,并且可以创建委托和表达式树。
Lambda表达式的组成:
输入参数、Lambda运算符(=>)、表达式或语句块构成。
基本形式:
(input parameters)=>expression。其中input parameters是输入参数,expression表示表达式。输入参数就是我们函数的参数一样,在Lambda运算符的左边,表达式或语句块位于Lambda运算符的右边。Lambda表达式运算符=> 读作"GO To"。
下面的例子,表示求某个整数的平方:
x=>x*x; 其中x是输入参数,x*x是表达式。
1、Lambda表达式的输入参数:
输入参数,可以是0个,1个,或多个。当输入参数为0个或多于1个时,Lambda运算符左边的括号不能省略。
x=>x*x; 和 (x)=>x*x;是等价的。当输入参数是0个时,()=>a*b;左边的括号不能省略,当输入参数多余1个时,括号也不能省略,且输入参数之间通过逗号隔开:(x,y)=>x*y;
2、Lambda表达式的语句
Lambda右边不但可以是一个表达式也可以是一个语句块。(input paramters)=>{statement;},statement表示语句块,一般语句块由多个表达式或语句组成。Lambda表达式的语法块必须在一对{}里面,如下面的例子: (x,y)=>{int result=x*y; }
3、Lambda表达式的查询
这里我们先给大家展示一下用法,可能初学者看不懂没关系,后面我们每个语法都会详细的讲解。
Lambda表达式最常见的用法就是查询,下面的代码实例中使用Where操作来使用Lambda表达式查询元素,并输出结果。
(1)创建一个字符串数组 UserNames,该数组包含10个用户名称。
(2)调用Lambda表达式 "x=>x=="IT少年""查询出名字为"IT少年"的名称保存在结果result中。
(3)将result输出到窗口。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace LinqDemo
{
class Program
{
static void Main(string[] args)
{ string[] UserNames = new string[] { "张三", "李四", "王武", "赵刘", "马云", "IT少年", "范冰冰", "IT少年", "张曼玉", "韩红" }; var result = UserNames.Where(x => x == "IT少年"); foreach (var imtem in result)
{
Console.WriteLine("用户名称:" + imtem);
}
Console.ReadKey();
} } }
我们数组中设置了2个"IT少年",那么输出窗口中应该是2条数据:
我们看到了和预想的结果一样。
4、Lambda表达式的转换
由于Lambda表达式本身就是一个匿名函数,因此匿名函数可以转换为相应的函数。Lambda表达式"x=>x*x;"可以转换成如下方法:
delegate int del(int i);
del mydelegate=x=>x*x;
int result=mydelegate(5);//result=25
这里涉及到委托,我们后面再看,这里就暂时不详细说明了。
Linq专题之Lambda表达式的更多相关文章
- Linq快速入门——Lambda表达式的前世今生
Linq快速入门——Lambda表达式的前世今生 Lambda表达式其实并不陌生,他的前生就是匿名函数,所以要谈Lambda表达式,就不得不谈匿名函数,要谈匿名函数,那又要不得不谈委托. 何为委托 ...
- 关于Linq中的Lambda表达式中OrderBy的深入理解
起因:就是一段Linq语句,OrderBy里面的i是什么? IQueryable<Student> slist = (from s in EFDB.Student select s). O ...
- Linq To Sql中实现Left Join与Inner Join使用Linq语法与lambda表达式
当前有两个表,sgroup与sgroupuser,两者通过gKey关联,而sgroup表记录的是组,而sgroupuser记录是组中的用户,因此在sgroupuser中不一定有数据.需要使用Left ...
- Linq专题列表
什么是Linq? Linq(Language-Integrated Query),即语言集成查询.是微软的一项新技术,能够将查询功能直接引入.NET Framework3.5 所支持的编程语言(C#, ...
- LINQ教程三:Lambda表达式解剖
C#3.0(.NET3.5)中引入了Lambda表达式和LINQ.Lambda表达式是使用一些特殊语法表示匿名方法的较短方法. 最基本的Lambda表达式语法如下: (参数列表)=>{方法体} ...
- LINQ和Lambda表达式
前言 前段时间接触了一种新的表达式,但是不知道这个是什么意思,所以就先站在巨人的肩膀用了,现在听师哥说这种写法是Lambda表达式.我一直以为,这个Lambda表达式和LINQ查询有异曲同工之妙,可惜 ...
- APS.NET MVC + EF (01)---Linq和Lambda表达式
1.1 Linq介绍 LINQ全称 Language Integrated Query(语言集成查询).为我们提供一种统一的方式来查询和操作各种数据. LINQ to Object:是针对实现了IEn ...
- 转:【More Effective C#】Lambda表达式优化
http://www.cnblogs.com/kongyiyun/archive/2010/10/19/1855274.html 使用Lambda表达式将会造成Lambda表达式主题部分的代码重复. ...
- Lambda表达式的本质是匿名函数
1.委托的简介: 委托可以简单的理解为方法的列表,添加的方法的参数类型,个数,顺序必须和委托一致, 也就是说委托起到了托管方法的作用,并且约束了要调用的方法. //1声明委托 public deleg ...
随机推荐
- 免安装版MySQL安装步骤
http://downloads.mysql.com/archives/community/ 1:添加环境变量把MySQL解压后的bin目录添加到path环境变量中 2:修改或者添加my-defaul ...
- 阿里大鱼.net core 发送短信
阿里大鱼还未提供 .net core 版SDK,但提供了相关API,下面是.net core版实现,只是简单发送短信功能: using System; using System.Collections ...
- myeclipse9或myeclipse10安装svn的方法
下载最新的SVN包 site-1.6.5.zip 从中解压出features与plugins文件夹,复制到C:\toBeInstalledSVN 里面,其它的*.xml文件不要 复制下列java代 ...
- bash的循环中无法保存变量
在bash中,如果循环在一个子shell中运行,那么在循环中对循环外面的变量的更改将在循环退出后不可见.像下面的例子: #!/bin/sh python run.py | while read lin ...
- 文件系统管理 之 实例解说 fdisk 使用方法
一.fdisk 的介绍: fdisk - Partition table manipulator for Linux ,译成中文的意思是磁盘分区表操作工具:本人译的不太好,也没有看中文文档:其实就是分 ...
- 3.C#中泛型类的进一步探讨
阅读目录 一:多重泛型 class不仅可以有T,还可以有K,实例化的时候传多个数据类型的类型,C#集合类型中的Dictionary就是多重泛型 using System; using System. ...
- DRUPAL 慢的原因
不止一次听人抱怨DRUPAL 慢,在本地开发环境尤为常见,较为常见的原因有:- 本地环境造成慢的原因,最常见的是由update manager 造成的,如果你发现你开的DRUPAL 页面 一直在等待 ...
- [leetcode]Rotate Array
in place交换 如果是k步,那么就是把后面k个放到前面了嘛. 我们先把整个数组reverse,然后把前面的reverse回来,再把后面的reverse回来 对于AB我们要通过reverse操作得 ...
- songtaste网站歌曲真实URL获取
个人挺喜欢songtaste网站的歌曲的,下载方法也层出不穷,可是作为程序员如果不知其中原理的方法真是羞愧.首先简单点的方法当然有google插件这样的嗅探器了,不过这种工具的原理还不是很了解.今天先 ...
- memcpy 和直接赋值的性能差异
不废话,看代码: #include <time.h> #include <stdint.h> #include <iostream> #define ARR_LEN ...