Linq擴(kuò)展方法簡(jiǎn)單分析
在向大家詳細(xì)介紹LINQ之前,首先讓大家了解下LINQ是什么,然后全面介紹Linq擴(kuò)展方法。
LINQ使查詢成為了.NET中頭等的編程概念,被查詢的數(shù)據(jù)可以是XML(LINQ to XML)、Databases(LINQ to SQL、LINQ to Dataset、LINQ to Entities)和對(duì)象(LINQ to Objects)。LINQ也是可擴(kuò)展的,允許你建立自定義的LINQ數(shù)據(jù)提供者(比如:LINQ to Amazon、LINQ to NHibernate、LINQ to LDAP)。在這里我會(huì)討論C#3.0中的一些新的語言特性和改進(jìn),正是它們使得LINQ變得如此強(qiáng)大~~
Linq擴(kuò)展方法
Linq擴(kuò)展方法可以使你來擴(kuò)展一個(gè)已存在的類型,增加它的方法,而無需繼承它或者重新編譯。所以不像為對(duì)象寫助手方法,Linq擴(kuò)展方法可以直接是對(duì)象自己的一部分。
一個(gè)示例,假設(shè)我們想要驗(yàn)證一個(gè)string 是不是合法的Email地址,我們可以編寫一個(gè)方法,輸入為一個(gè)string 并且返回true 或者false ?,F(xiàn)在,使用Linq擴(kuò)展方法,我們可以如下這樣做:
- public static class MyExtensions {
- publicstatic bool IsValidEmailAddress(this strings) {
- Regex regex = new
- Regex( @"^[w-.]+@([w-]+.)+[w-]{2,4}$");
- return
- regex.IsMatch(s);
- }
- }
我們定義了一個(gè)帶有靜態(tài)方法的靜態(tài)類。注意,那個(gè)靜態(tài)方法在參數(shù)類型string 前面有一個(gè)this 關(guān)鍵詞,這會(huì)告訴編譯器這個(gè)特殊的Linq擴(kuò)展方法會(huì)增加給string 類型的對(duì)象。于是我們就可以在string 中調(diào)用這個(gè)成員方法:
- using MyExtensions;
- string email = Request.QueryString["email"];
- if( email.IsValidEmailAddress() ) {
- // ...
- }
值得提出的是,LINQ就是使用了System.Linq 命名空間中的Linq擴(kuò)展方法(比如where()、orderby()、select()、sum()、average()等等),而且它定義了標(biāo)準(zhǔn)查詢操作符,可以用來查詢關(guān)系數(shù)據(jù)庫(kù)、XML和任何實(shí)現(xiàn)了IEnumerable<T> 接口的.NET對(duì)象。
【編輯推薦】