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

走进Linq--Linq横空出世篇

作者: 横刀天笑  来源: 博客园  发布时间: 2008-09-23 11:30  阅读: 50561 次  推荐: 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


我们将查询条件使用委托解决了,只要传递一个接收Book作为参数,返回bool值的方法进去就可以查询满足条件的书籍了,但是,为了这个委托,我们还得先定义一个新方法,然后。。。。太麻烦了,为此C# 2.0为我们提供了匿名方法,专门针对这些只有“一句话方法”:

IList<Book> results = Helper.SearchBook(delegate(Book book) { return book.Title == "yuyi"; });

代码是减少不少,可这种写法还是不“人性化”,这还是一种人向计算机妥协的结果,才产生了这种怪异的写法,如是C# 3.0给我们提供了Lambda表达式:

IList<Book> results = Helper.SearchBook(book => book.Title == "yuyi");

代码更短了,写法也越来越向人类语言靠近了(这也许就是计算机语言的发展历史,随着计算机越来越智能,总有一天必会是计算机向人类妥协)。

不过这里还有一点不爽,每一次调用这个查找方法都要带Helper,要是IList自己就这个方法该多好。这个想法很好,C# 3.0里还为我们提供了扩展方法:

public static class Helper
{
    
public delegate bool Condtion(Book book);

    
public static IList<Book> Where(this IList<Book> books,Condtion condition)
    
{
        IList 
< Book > results = new List<Book>();
        
foreach (Book book in books)
        
{
            
if (condition(book))
            
{
                results.Add(book);
            }

        }

        
return results;
    }

}
13
4

数据库热门文章

    数据库最新文章

      最新新闻

        热门新闻