您的位置:知识库 » 数据库

走进Linq--Linq横空出世篇

作者: 横刀天笑  来源: 博客园  发布时间: 2008-09-23 11:30  阅读: 50498 次  推荐: 13   原文链接   [收藏]  

系列文章导航:

走进Linq--Linq横空出世篇

走进Linq-辉煌的背后

走进Linq-Linq大观园

不能不说的C#特性-对象集合初始化器

不能不说的C#特性-匿名类型与隐式类型局部变量

不能不说的C#特性-扩展方法

不能不说的C#特性-匿名方法和Lambda表达式

不能不说的C#特性-迭代器(上)及一些研究过程中的副产品

不能不说的C#特性-迭代器(下),yield以及流的延迟计算

走进Linq-Linq to Objects(上)基础篇

走进Linq-Linq to Objects(下)实例篇

走进Linq-Linq to SQL感性认识篇

走进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-How do I(4)拾遗补零篇第一节

走进Linq-Linq to SQL源代码赏析 Table的获取过程

走进Linq-Linq to SQL源代码赏析之Provider的初始化

走进Linq-Linq to SQL源代码赏析,通过Linq to SQL看Linq


仔细比较一下这个实现与刚才的实现有何不同(我们还给它起了一个更好听的名字Where,是不是和SQL更像了),现在我们可以这样调用了:

IList<Book> results = books.Where(book => book.Title == "yuyi");

Books是一个IList,这行代码是多么的自然而优雅。依葫芦画瓢,我们可以到处这样书写代码了,不仅仅可以查找书籍,还可以查找帐户,一切处理集合查找的方法我都希望这样做,终于有一天你厌烦了,查找书,查找帐户,等等,他们之间没有什么差异,为什么我们要做这么多重复的工作呢,所有的IList都继承自IEnumerable,我们为啥不给IEnumerable添加一个Where方法,这样我们不就一劳永逸了么,现在该是泛型施展才华的地方了:

public static class Helper
{
    
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大卸八块。

13
4

数据库热门文章

    数据库最新文章

      最新新闻

        热门新闻