走进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
如是我可以写这样的代码:
public static class Helper
{
public static IList<Book> SearchBookByPrice()
{
IList<Book> books = //..//初始化一个Book集合
IList<Book> results = new List<Book>();
foreach(Book book in books)
{
if(book.Price < 50)
{
results.Add(book);
}
}
return results;
}
}
{
public static IList<Book> SearchBookByPrice()
{
IList<Book> books = //..//初始化一个Book集合
IList<Book> results = new List<Book>();
foreach(Book book in books)
{
if(book.Price < 50)
{
results.Add(book);
}
}
return results;
}
}
现在是根据单价查找,那如果我要按照书籍名称查找或者按照作者查找怎么办?那只有重写这个方法了。但是你想想,我们的查找条件到最后只不过是一个true或者false,只要if()里面的表达式为true我们就将其添加到返回结果的集合中,我才不管里面的表达式详细的是什么呢,ok,那这样我们就可以进一步改进这个方法了:
public static class Helper
{
public delegate bool Condtion(Book book);
public static IList<Book> SearchBook(Condtion condition)
{
IList<Book> books = //..//初始化一个Book集合
IList < Book > results = new List<Book>();
foreach (Book book in books)
{
if (condition(book))
{
results.Add(book);
}
}
return results;
}
}
{
public delegate bool Condtion(Book book);
public static IList<Book> SearchBook(Condtion condition)
{
IList<Book> books = //..//初始化一个Book集合
IList < Book > results = new List<Book>();
foreach (Book book in books)
{
if (condition(book))
{
results.Add(book);
}
}
return results;
}
}
看看我们如何调用改进后的方法:
public bool ConditionTitle(Book book)
{
return book.Title == "yuyi";
}
IList<Book> results = Helper.SearchBook(new Condition(ConditionTitle));
{
return book.Title == "yuyi";
}
IList<Book> results = Helper.SearchBook(new Condition(ConditionTitle));