Linq扩展方法简单分析

在向大家详细介绍LINQ之前,首先让大家了解下LINQ是什么,然后全面介绍Linq扩展方法。

LINQ使查询成为了.NET中头等的编程概念,被查询的数据可以是XML(LINQ to XML)、Databases(LINQ to SQL、LINQ to Dataset、LINQ to Entities)和对象(LINQ to Objects)。LINQ也是可扩展的,允许你建立自定义的LINQ数据提供者(比如:LINQ to Amazon、LINQ to NHibernate、LINQ to LDAP)。在这里我会讨论C#3.0中的一些新的语言特性和改进,正是它们使得LINQ变得如此强大~~

Linq扩展方法

Linq扩展方法可以使你来扩展一个已存在的类型,增加它的方法,而无需继承它或者重新编译。所以不像为对象写助手方法,Linq扩展方法可以直接是对象自己的一部分。

一个示例,假设我们想要验证一个string 是不是合法的Email地址,我们可以编写一个方法,输入为一个string 并且返回true 或者false 。现在,使用Linq扩展方法,我们可以如下这样做:

 
 
 
  1. public static class MyExtensions {  
  2.  
  3. publicstatic bool IsValidEmailAddress(this strings) {  
  4.  
  5. Regex regex = new 
  6. Regex( @"^[w-.]+@([w-]+.)+[w-]{2,4}$");  
  7.  
  8. return  
  9. regex.IsMatch(s);  
  10.  
  11. }  
  12.  

我们定义了一个带有静态方法的静态类。注意,那个静态方法在参数类型string 前面有一个this 关键词,这会告诉编译器这个特殊的Linq扩展方法会增加给string 类型的对象。于是我们就可以在string 中调用这个成员方法:

 
 
 
  1. using MyExtensions;  
  2. string email = Request.QueryString["email"];  
  3. if( email.IsValidEmailAddress() ) {  
  4. // ...  

值得提出的是,LINQ就是使用了System.Linq 命名空间中的Linq扩展方法(比如where()、orderby()、select()、sum()、average()等等),而且它定义了标准查询操作符,可以用来查询关系数据库、XML和任何实现了IEnumerable<T> 接口的.NET对象。

【编辑推荐】

  1. Linq查询二维数组浅析
  2. 学习Linq经验总结
  3. Linq修改XML文档描述
  4. Linq延时执行全面分析
  5. Linq实现Left join
THE END