记录Linq所学.

因为一时之间对Linq比较感兴趣.在博客园查找相关资料如下.     走进Linq(http://kb.cnblogs.com/list/42569/)作者:横刀天笑

在上根据作者的步骤学习后一些入门,整理一下.(感觉Linq就是一些C#语言的新特性集合的产物).
首先提供一个功能用于把一个类的属性的值全部输出.因为通用性.用上反射取值.

Code

 先定义自然界中的书.如下

Code

有下例要求.有很多的书.要求你根据相关条件查找出满足条件的书.
我们分析如下.很多的书---IList<Book>.相关条件---public delegate bool DelegateWhere(Book book);
满足条件的书---IList<Book>.
查找过程如下.

Code

以上只是实现.那么人要查找.那么如何来做这一动作了.
首先是上面查找的相关条件的确定.那么有人问.那么还不是要定义一个条件(就是委托).然后人查找是加上条件.能不能直接一
步到位(比喻人可以先知道条件然后查找,也可以查找时才知道条件吗,是不是).C# 2.0为我们提供了匿名方法,能让我们查找时
输入条件.如下var filter = books.Where(delegate(Book book) { return book.Title == "Linq"; });
大家可能有点不清楚.这个books就是IList<Book>,而Where就是他的扩展方法.大家可以看到这个查找方式不是很漂亮,因此
C# 3.0给我们提供了Lambda表达式,请看如下简化如下var filter1 = books.Where(book => book.Title == "Linq");
可以看到漂亮很多.简要说明一下
            //也可以多个输入参数,逗号分隔,别忘记小括号
            //(x,y) => x+y等价与
            //delegate(int x,int y){return x+y;}
而select,等都可以通过如上方式实现.大家可能注意到.以上方法没有通过性.而Linq是对实现IEnumerable接口的可能通用的.
如下按上面的前二步我们重复一下.就可以实现对IEnumerable接口通用.

Code

上面的委托其实MS已经给我们实现,

Code

还有大家在上面可能看到yield return关键字.这是C# 2.0里出现的一个关键字,返回一个迭代器.
通过如上.我们可以写如下语句.

Code

在我机器上测试如果如下.(Reflector.write请看最上面的那个类).

实践和理论完全相符.大家看下面的是不是有点Linq的影子了.
最后我们把如下Linq语句解析如下.

Code

在Linq里的关键字如in,from,where大家可以想象成C++里的define,实际是一些函数和变量定义.(不知理解是否有误.有的请指出.在此谢谢)
写在最后.大家可以看到如上有许多的大家不平常用的C#语言新性质.组合在一起的功能如此强大.呵呵.
本人水平有限.有什么错误谢谢大家的指出.

posted @ 2009-09-09 10:00  天天不在  阅读(681)  评论(0编辑  收藏  举报