走进Linq--Linq横空出世篇
系列文章导航:
不能不说的C#特性-迭代器(下),yield以及流的延迟计算
走进Linq-Linq to SQL How do I(1)
走进Linq-Linq to SQL How do I(2)
走进Linq-Linq to SQL How do I(3)
走进Linq-Linq to SQL源代码赏析 Table
走进Linq-Linq to SQL源代码赏析之Provider的初始化
走进Linq-Linq to SQL源代码赏析,通过Linq to SQL看Linq
仔细比较一下这个实现与刚才的实现有何不同(我们还给它起了一个更好听的名字Where,是不是和SQL更像了),现在我们可以这样调用了:
Books是一个IList,这行代码是多么的自然而优雅。依葫芦画瓢,我们可以到处这样书写代码了,不仅仅可以查找书籍,还可以查找帐户,一切处理集合查找的方法我都希望这样做,终于有一天你厌烦了,查找书,查找帐户,等等,他们之间没有什么差异,为什么我们要做这么多重复的工作呢,所有的IList都继承自IEnumerable,我们为啥不给IEnumerable添加一个Where方法,这样我们不就一劳永逸了么,现在该是泛型施展才华的地方了:
{
public delegate bool Condtion<T>(T t);
public static IEnumerable<T> FindBy<T>(this IEnumerable<T> items, Condtion<T> condition)
{
foreach (T t in items)
{
if (condition(t))
{
//C# 2.0里出现的一个关键字,返回一个迭代器
yield return t;
}
}
}
}
现在,不管是IList还是IList都可以使用这个Where方法了 但是做集合操作的时候我们不仅仅需要Where,还需要OrderBy,Group等等,我想把所有的SQL能干的都移植过来。当然微软也意识到了这点,如是在.net 3.5里,微软发布了我们梦寐以求的Linq,将查询集成到语言里面来。它给IEnumerable添加了很多扩展方法,这样你可以很自然的去调用。你可以使用Reflector打开System.Core.dll,打开System.Linq命名空间,在这个命名空间里有一个Enumerable类,这里面就是微软为我们添加的扩展方法,看看,是不是SQL里所有的东西都可以在这里找到了。
好了,就此搁笔吧,这一篇作为我的走进Linq系列的开篇,在接下来我会为你把Linq大卸八块。