一、简介
Lambda表达式来源于数学家Alonzo Church等人在1920~1930期间发明的Lambad积分。Lambda积分是用于表示函数的一套系统,它使用希腊字母Lambda( λ )来表示无名函数。
C# 3.0引入了Lambda表达式,它是一种简化的匿名函数,可用于创建委托或表达式目录树。你也可以将 Lambda 表达式作为参数进行传递,或者将它作用于函数调用值调用后返回的一个函数来使用。
二、基础
它的语法形式是: 输入参数 => 表达式或语句块 即运算符的左边是输入参数(如果有),右边是表达式或语句块。 ( “ => ” 读作 “ goes to ” )
2.1 表达式Lambda
表达式位于 => 运算符右侧的 lambda 表达式称为“表达式 lambda”。 表达式 Lambda 会返回表达式的结果,并采用以下基本形式:
(input parameters) => expression
delegate int myDel(int x,int y); //声明委托
class Program
{
static void Main(string[] args)
{
myDel del = (x,y) => x+y; //返回x+y的结果
Console.WriteLine("values {0}",del(5,8)); //输出13 Console.ReadKey(); } }
有关Lambda表达式的参数列表要点如下:
♥ Lambda表达式参数列表中的参数必须在参数数量、类型和位置上与委托相匹配
♥ 表达式参数列表中的参数不一定需要包含类型(隐式类型),除非委托有ref或out参数----此时必须注明类型(显式类型)
♥ 如果只有一个参数,并且是隐式类型的,周围的圆括号可以被省略,否则必须有括号
♥ 如果没有参数,必须使用一组空的圆括号
2.2 语句Lambda
当lambda表达式中,有多个语句时,写成如下形式:
(input parameters) => { statement; }
delegate int myDel(string str);
class Program
{
static void Main(string[] args)
{
myDel del = (str) =>
{
Console.WriteLine("hello {0}",str);
return 123;
};
Console.WriteLine("values {0}",del("world"));
Console.ReadKey();
}
}
在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。
在上述的表达式中,仅仅只有当参数只有一个的时候,括号是可选择的,例如下面这种含有两个参数时候的情况应该是这样子的写法
当表达式中的多个参数编译器无法自动判断类型的时候,则需要显式指定类型。
1 | ( int firstIndex, string str) => str.IndexOf( 'Hello' ) > firstIndex
|
(1)查询班级编号为1001的班级下面的所有学生实体并返回到list1001中存储
1 | var list1001=Studentlist.Where(t=>t.ClassCode==‘1001’);
|
(2)查询班级编号为1001的班级下面的所有学生实体并返回到list1001中存储,并按照学生的出生日期从小到大排列。
1 | var list1001=Studentlist.Where(t=>t.ClassCode==‘1001’).OrderBy(t=>t.BirthDay);
|
在此说一下,OrderBy是从小到大排序,需要从大到小排列则用OrderByDescending。
(3)查询班级编号为1001的班级下面的姓氏为【李】的同学的所有集合,并按照学生的出生日期从小到大排列。
1 | var list1001=Studentlist.Where(t=>t.ClassCode==‘1001’&&t.StudentName.StartWith(“李”)).OrderBy(t=>t.BirthDay);
|