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的元素。
这样一来,是不是让查询变得省事了,代码写得更少了。

 

posted @ 2012-12-09 18:29  Andy_lu  阅读(71)  评论(0)    收藏  举报