C#中的Linq之Lambda表达式(二)
MSDN是这样解释的:lambda 表达式是一个可用于创建委托或表达式树类型的匿名函数。
我还是用一个例子来简单解释一下,先看下面的代码。
1 delegate int del(int i); 2 static void Main(string[] args) 3 { 4 del myDelegate = x => x * x; 5 int j = myDelegate(5); //j = 25 6 }
代码中,我重点要讲的是第4行。在“=”号的左边定义了一个委托变量,“=”的右边是一个表达式“x => x * x”,那么很明显就是让左边的委托变量指向右边的表达式。这个表达式其实就是一个匿名函数,在程序调用委托时就是调用了这个匿名函数。而这个表达式就是Lambda表达式。
Lambda表达式的运算符是“=>”,运算符的左边是输入参数,右边是Lambda表达式。上面的Lambda表达式的意思是传入一个参数“x”,然后返回这个参数的乘积。
好了,刚才Lambda表达式做了一下简单的解释,接下来看看它在Linq中到底有何神奇的作用。
再来个例子,如下:
View Code
1 class SimpleLambda 2 { 3 static void Main() 4 { 5 6 // Data source. 7 int[] scores = { 90, 71, 82, 93, 75, 82 }; 8 9 // The call to Count forces iteration of the source 10 int highScoreCount = scores.Where(n => n > 80).Count(); 11 12 Console.WriteLine("{0} scores are greater than 80", highScoreCount); 13 14 // Outputs: 4 scores are greater than 80 15 } 16 }
在这个例子中,没有直接用Linq查询表达式来查询数组scores里面大于80的元素,而是用Linq接口中的Where方法来实现的。Where方法能接收的参数是委托类型的,而刚刚我们讲到的Lambda表达式不正好可以转换为委托嘛,所以在Where方法中,我传递的参数是“n => n > 80”即值大于80的元素。
这样一来,是不是让查询变得省事了,代码写得更少了。


浙公网安备 33010602011771号