Linq常用语法和Lambda表达式 总结

    最近想为一个自己喜欢的网站做WP7客户端,顺便好学学以前没有掌握好的知识。

    因为原网站太老,数据太多,没有RSS订阅源,没有什么所谓的API。看来只能是直接获取网站的源代码然后用正则表达式处理。先做个简单的小功能吧,虽说简单,不知道原网站任何代码和后台处理方式,自己也是个小菜鸟,只有硬来了,源码、正则表达式处理吧。

    在windows界面上做的很好的代码,无奈相似的方式在WP7中获取源代码都出现点问题,遇到了注册事件,写好了方法,但是却不知道怎么返回值,只能直接写在当前方法的前面,但是想想,程序中要用到很多这种方法,所以还是适合统一到类里面。但是返回值,一个问题。

    说道注册事件,不免看了看Linq和Lambda,我想它们应嘎可以帮我的忙,看完给自己留下一段简单的总结。边学边做。

1、查询语法与方法语法:
① 查询语法(query syntax)是声明形式的,看上去和SQL语句很相似。查询语法使用查询表达式形式书写。
② 方法语法(method syntax)是命令形式的,它使用的是标准的方法调用。方法是一组叫做标准查询运算符的方法。
③ 在一个查询中也可以组合两种形式。

例子:

 1         protected void btnSel_Click(object sender, EventArgs e)

 2         {

 3             int[] num = { 2, 5, 34, 66, 96, 80, 13 };

 4             //查询语法

 5             

 6             var numsel = from n in num

 7                          where n < 35

 8                          select n;

 9             

10 

11             //方法语法

12             //var numsel = num.Where(x=>x<35);

13 

14             //两种形式的结合

15             int numcount = (from n in num

16                             where n < 35

17                             select n).Count();

18 

19 

20             foreach (var item in numsel)

21             {

22                 Response.Write(item+"  ");

23             }

24 

25             Response.Write(numcount);

26         }

 

2、查询变量
①创建int数组。
②返回一个IEnumerable对象,它可以用来枚举查询结果。
③执行一个查询,然后调用一个方法(Count)来返回从查询返回的项的总数。

 

 1         protected void btnCh_Click(object sender, EventArgs e)

 2         {

 3             int[] nums = { 2, 6, 3, 17 };

 4             //返回枚举数

 5             IEnumerable<int> numsel = from n in nums

 6                                       where n < 13

 7                                       select n;//输出:2,6,3

 8 

 9             int numcount = (from n in nums

10                             where n < 13

11                             select n).Count();//输出:3

12 

13             foreach (int item in numsel)

14             {

15                 Response.Write(item+",");

16             }

17             Response.Write(numcount);

18         }

PS:有必要用枚举么?觉得还是1中的直接用方便。

3.查询表达式的结构
子句必须按照一定的顺序出现
① from子句和select...group子句这两部分是必须的。
② 其他子句是可选的。

 

from

 

查询体

from…

let…

where…

(可选)

 

order by…

(可选)

select…

group…

Into

(可选)

PS:不常用就没怎么总结了。

4.利用orderby可以对数字进行排序;

例如:

 1         protected void btnpx_Click(object sender, EventArgs e)

 2         {

 3             int[] nums = { 3, 15, 67, 72, 21, 34, 21, 6 };

 4             var numsel = from n in nums

 5                          orderby n

 6                          //where n<50

 7                          select n;//输出:3,6,15,21,21,34,67,72, 

 8             foreach (var item in numsel)

 9             {

10                 Response.Write(item+",");

11             }

12         }

PS:如果用来替换冒泡排序不是挺好!

5.lambda表达式

  第一行演示了被赋值给变量del的匿名方法。

  第三行演示了被转换成lambda表达式后的相同的匿名方法

 1         delegate double MyDel(int par);

 2         protected void btnlam_Click(object sender, EventArgs e)

 3         {

 4             MyDel del = delegate(int x) { return x + 1; };//匿名方法

 5 

 6             MyDel le1 = (int x) => { return x + 1; };//lambda表达式

 7             MyDel le2 = (x) => { return x+1; };

 8             MyDel le3 = x => { return x + 1; };

 9             MyDel le4 = x => x + 1;

10             Response.Write(del(5));

11             Response.Write(le1(5));

12             Response.Write(le2(5));

13             Response.Write(le3(5));

14             Response.Write(le4(5));

15         }

6.lambda表达式的优越性

例子:计算数组中奇数的数量

①  使用委托

 1         static bool IsOdd(int x)//委托对象使用方法

 2         {

 3             return x % 2 == 1;//如果是x奇数,返回true

 4         }

 5         protected void btndelegate_Click(object sender, EventArgs e)

 6         {

 7             //使用委托

 8             int[] intArray = new int[] { 3, 4, 5, 2, 53, 21 };

 9             Func<int, bool> myDel = new Func<int, bool>(IsOdd);//委托对象

10             var countOdd = intArray.Count(myDel);

11 

12             Response.Write("countOdd is:" + countOdd);//输出:coountOdd is 4

13         }

②  使用匿名方法

 1         protected void btnfun_Click(object sender, EventArgs e)

 2         {

 3             //使用匿名方法

 4             int[] intArray = new int[] { 3, 4, 5, 2, 53, 21 };

 5             Func<int, bool> myDel = delegate(int x)

 6                                 {

 7                                     return x % 2 == 1;

 8                                 };

 9             var countOdd = intArray.Count(myDel);

10 

11             Response.Write("countOdd is:" + countOdd);//输出:coountOdd is 4

12         }

③  使用lambda表达式

1         protected void btnlambda_Click(object sender, EventArgs e)

2         {

3             //使用lambda表达式

4             int[] intArray = new int[] { 3, 4, 5, 2, 53, 21 };

5             var countOdd = intArray.Count(x => x % 2==1);//lambda表达式

6 

7             Response.Write("countOdd is:" + countOdd);//输出:coountOdd is 4

8         }

PS:代码减少了!仅仅是这样么?

 

 参考资料:C#4.0图解教程

这里顺便用B/S

你可能感兴趣的:(lambda)