色尼玛亚洲综合影院,亚洲3atv精品一区二区三区,麻豆freexxxx性91精品,欧美在线91

走進(jìn)Linq-Linq大觀園

系列文章導(dǎo)航:

走進(jìn)Linq--Linq橫空出世篇

走進(jìn)Linq-輝煌的背后

走進(jìn)Linq-Linq大觀園

不能不說的C#特性-對(duì)象集合初始化器

不能不說的C#特性-匿名類型與隱式類型局部變量

不能不說的C#特性-擴(kuò)展方法

不能不說的C#特性-匿名方法和Lambda表達(dá)式

不能不說的C#特性-迭代器(上)及一些研究過程中的副產(chǎn)品

不能不說的C#特性-迭代器(下),yield以及流的延遲計(jì)算

走進(jìn)Linq-Linq to Objects(上)基礎(chǔ)篇

走進(jìn)Linq-Linq to Objects(下)實(shí)例篇

走進(jìn)Linq-Linq to SQL感性認(rèn)識(shí)篇

走進(jìn)Linq-Linq to SQL How do I(1)

走進(jìn)Linq-Linq to SQL How do I(2)

走進(jìn)Linq-Linq to SQL How do I(3)

走進(jìn)Linq-How do I(4)拾遺補(bǔ)零篇第一節(jié)

走進(jìn)Linq-Linq to SQL源代碼賞析 Table的獲取過程

走進(jìn)Linq-Linq to SQL源代碼賞析之Provider的初始化

走進(jìn)Linq-Linq to SQL源代碼賞析,通過Linq to SQL看Linq


文章發(fā)布后大家有些人叫做,心里竊喜,不過壓力也大增,我很想按照簡(jiǎn)潔明快的文風(fēng)寫下去,不過講技術(shù)的文章很難不落于沉悶,所以我努力了。(題外話:這幾天猛看幽默小說,想把文字寫的幽默一點(diǎn),開個(gè)玩笑,呵呵)

經(jīng)過幾天的閉關(guān)編程大師又有了一些新的覺悟了,不管對(duì)DSL還是命令式編程和函數(shù)式編程都有了新的理解。如是他又接著了漫長(zhǎng)的云游。第一站當(dāng)然就是那個(gè)曾經(jīng)讓他結(jié)下心結(jié)的那個(gè)剛畢業(yè)的coder。

大師:“嘿,這幾日可好,還在發(fā)牢騷么?”

Coder:“不了,正好你來了,讓你看看我的程序”,Coder將他的電腦屏幕轉(zhuǎn)向大師,期盼的眼神表明他急切的期望得到大師的夸獎(jiǎng)。

如是大師看到了如下一些代碼:

/// 
    
/// 一個(gè)通用的泛型委托,代表接受一個(gè)參數(shù)并有一個(gè)返回值的方法
    
/// 
    
/// 輸入?yún)?shù)類型
    
/// 返回值類型
    
/// 輸入?yún)?shù)
    
/// 返回值
    public delegate TOutput MyDelegate<TInput,TOutput>(TInput input);
    
/// 
    
/// 這個(gè)類是包含有對(duì)IEnumerable接口的一系列擴(kuò)展方法
    
/// 因?yàn)樵?NET里所有的集合類都實(shí)現(xiàn)了IEnumerable接口
    
/// 所以對(duì)該接口的擴(kuò)展將擴(kuò)散到所有集合
    
/// 
    public static class Extension
    {
        
public static IEnumerable<TInput> Where<TInput>(this IEnumerable<TInput> self, MyDelegate<TInput, bool> filter)
        {
            
foreach (TInput item in self)
                
if (filter(item))
                    
yield return item;
        }
        
public static IEnumerable<TOutput> Select<TInput, TOutput>(this IEnumerable<TInput> self, MyDelegate<TInput, TOutput> selector)
        { 
            
foreach(TInput item in self)
                
yield return selector(item);
        }
       
//下面有更多的SQL風(fēng)格的移植
}

系列文章導(dǎo)航:

走進(jìn)Linq--Linq橫空出世篇

走進(jìn)Linq-輝煌的背后

走進(jìn)Linq-Linq大觀園

不能不說的C#特性-對(duì)象集合初始化器

不能不說的C#特性-匿名類型與隱式類型局部變量

不能不說的C#特性-擴(kuò)展方法

不能不說的C#特性-匿名方法和Lambda表達(dá)式

不能不說的C#特性-迭代器(上)及一些研究過程中的副產(chǎn)品

不能不說的C#特性-迭代器(下),yield以及流的延遲計(jì)算

走進(jìn)Linq-Linq to Objects(上)基礎(chǔ)篇

走進(jìn)Linq-Linq to Objects(下)實(shí)例篇

走進(jìn)Linq-Linq to SQL感性認(rèn)識(shí)篇

走進(jìn)Linq-Linq to SQL How do I(1)

走進(jìn)Linq-Linq to SQL How do I(2)

走進(jìn)Linq-Linq to SQL How do I(3)

走進(jìn)Linq-How do I(4)拾遺補(bǔ)零篇第一節(jié)

走進(jìn)Linq-Linq to SQL源代碼賞析 Table的獲取過程

走進(jìn)Linq-Linq to SQL源代碼賞析之Provider的初始化

走進(jìn)Linq-Linq to SQL源代碼賞析,通過Linq to SQL看Linq


Coder一邊展示著代碼,一邊念叨著,這里是因?yàn)槭褂昧?ldquo;擴(kuò)展方法”所以可以這樣寫,這里使用了Lambda表達(dá)式,它可以簡(jiǎn)化匿名方法的寫法,這里......

編程大師一邊聽著coder的講解,一遍頻頻點(diǎn)頭:“傻小子,不錯(cuò)啊,有點(diǎn)當(dāng)年我的影子,按照你這樣下去羅馬也可以建成了,Linq也是可以寫出來的呀。”

Coder聽到大師的話興奮異常,不過他從這句話里還是捕捉到了一個(gè)陌生的詞匯:Linq。他用詫異的眼神看著大師,問道:”啥是Linq,是誰家又創(chuàng)造了個(gè)新詞匯?”

大師笑著說,其實(shí)你剛才做的微軟已經(jīng)幫你做了,還給它起了一個(gè)非常洋氣的名字:Linq,中文名字呢就叫做 語言集成查詢。

在.NET 3.5發(fā)布的時(shí)候,微軟新發(fā)布了幾個(gè)dll,其中有一個(gè)就叫做System.Core.dll,在這個(gè)dll下對(duì)一些System命名空間做了進(jìn)一步擴(kuò)展。

在System.Core.dll下的System命名空間下你會(huì)發(fā)現(xiàn)有這么幾個(gè)泛型的委托:

//無參,有一個(gè)返回值
public delegate TResult Func<TResult>();
//有一個(gè)參數(shù)和一個(gè)返回值,和你那個(gè)MyDelegate一樣
public delegate TResult Func<T, TResult>(T arg);
//兩個(gè)參數(shù)一個(gè)返回值
public delegate TResult Func<T1, T2, TResult>(T1 arg1, T2 arg2);
//三個(gè)參數(shù)一個(gè)返回值
public delegate TResult Func<T1, T2, T3, TResult>(T1 arg1, T2 arg2, T3 arg3);
//四個(gè)參數(shù)一個(gè)返回值
public delegate TResult Func<T1, T2, T3, T4, TResult>(T1 arg1, T2 arg2, T3 arg3, T4 arg4);

系列文章導(dǎo)航:

走進(jìn)Linq--Linq橫空出世篇

走進(jìn)Linq-輝煌的背后

走進(jìn)Linq-Linq大觀園

不能不說的C#特性-對(duì)象集合初始化器

不能不說的C#特性-匿名類型與隱式類型局部變量

不能不說的C#特性-擴(kuò)展方法

不能不說的C#特性-匿名方法和Lambda表達(dá)式

不能不說的C#特性-迭代器(上)及一些研究過程中的副產(chǎn)品

不能不說的C#特性-迭代器(下),yield以及流的延遲計(jì)算

走進(jìn)Linq-Linq to Objects(上)基礎(chǔ)篇

走進(jìn)Linq-Linq to Objects(下)實(shí)例篇

走進(jìn)Linq-Linq to SQL感性認(rèn)識(shí)篇

走進(jìn)Linq-Linq to SQL How do I(1)

走進(jìn)Linq-Linq to SQL How do I(2)

走進(jìn)Linq-Linq to SQL How do I(3)

走進(jìn)Linq-How do I(4)拾遺補(bǔ)零篇第一節(jié)

走進(jìn)Linq-Linq to SQL源代碼賞析 Table的獲取過程

走進(jìn)Linq-Linq to SQL源代碼賞析之Provider的初始化

走進(jìn)Linq-Linq to SQL源代碼賞析,通過Linq to SQL看Linq


還沒等coder說出口大師就在鍵盤上敲下:

程序=代碼+數(shù)據(jù)

編程大師如是接著說:那這些數(shù)據(jù)平時(shí)都來源于哪里?

Coder:程序中自己構(gòu)造的一些集合對(duì)象,像我剛才的代碼中那樣,還有數(shù)據(jù)庫,這個(gè)使我們平時(shí)用到最多的,還有XML存儲(chǔ),還有WebService,這個(gè)來源于遠(yuǎn)程的數(shù)據(jù),還有什么RSS啦等等,很多了。

編程大師:嗯,是的。數(shù)據(jù)的來源非常廣泛,就說我們平常用的三個(gè)吧,內(nèi)存中的集合對(duì)象、XML存儲(chǔ)和數(shù)據(jù)庫。對(duì)于內(nèi)存中的集合對(duì)象我們有語言自身的支持,XML我們有XML的一些API,比如XPath,對(duì)于數(shù)據(jù)庫我們有ADO.NET,可實(shí)際上從抽象層面我們對(duì)這些數(shù)據(jù)的操作都是相同的,你想不想屏蔽掉存儲(chǔ)的細(xì)節(jié),在高層有一個(gè)統(tǒng)一的API訪問這些數(shù)據(jù)呢?至于數(shù)據(jù)存儲(chǔ)在哪里對(duì)于你是透明的,也許它存在于你內(nèi)存中,也許在萬網(wǎng)的機(jī)房也許在美國(guó)西雅圖,但是對(duì)于你來說這些都無需關(guān)心,你的代碼都一樣。

Coder:聽起來是個(gè)很美妙的事情,這不會(huì)是在做夢(mèng)吧。

大師:不是在做夢(mèng),今天你已經(jīng)有了這些方法

在.NET 3.5里微軟還發(fā)布了另外兩個(gè)dll:

System.Data.Linq.dll,System.Xml.Linq.dll

在System.Data.Linq.dll里,對(duì)數(shù)據(jù)庫的查詢做了支持,不過目前微軟提供的只支持Sql Server,感謝開源社區(qū),現(xiàn)在有了DbLinq,它提供了對(duì)MySql,Oracle,Sql Server,PostgreSql,Sqlite的支持。

System.Xml.Linq.dll在更高層次對(duì)Xml的訪問做了支持

這樣你從微軟這里獲得了:Linq to Objects 對(duì)內(nèi)存中的集合的支持、Linq to Xml 對(duì)Xml的支持、Linq to SQL 對(duì)Sql Server的支持

這是一張從Linq in Action那本書里的截圖,該圖很好的在一個(gè)大的層次上揭示了Linq的視圖。C#、vb.NET等一系列.NET語言在一些語言特性和Linq對(duì)語言的擴(kuò)展上對(duì)Linq家族提供了支持。未來我們將會(huì)實(shí)現(xiàn)Linq in Everywhere,Linq將成為你的變成習(xí)慣。

系列文章導(dǎo)航:

走進(jìn)Linq--Linq橫空出世篇

走進(jìn)Linq-輝煌的背后

走進(jìn)Linq-Linq大觀園

不能不說的C#特性-對(duì)象集合初始化器

不能不說的C#特性-匿名類型與隱式類型局部變量

不能不說的C#特性-擴(kuò)展方法

不能不說的C#特性-匿名方法和Lambda表達(dá)式

不能不說的C#特性-迭代器(上)及一些研究過程中的副產(chǎn)品

不能不說的C#特性-迭代器(下),yield以及流的延遲計(jì)算

走進(jìn)Linq-Linq to Objects(上)基礎(chǔ)篇

走進(jìn)Linq-Linq to Objects(下)實(shí)例篇

走進(jìn)Linq-Linq to SQL感性認(rèn)識(shí)篇

走進(jìn)Linq-Linq to SQL How do I(1)

走進(jìn)Linq-Linq to SQL How do I(2)

走進(jìn)Linq-Linq to SQL How do I(3)

走進(jìn)Linq-How do I(4)拾遺補(bǔ)零篇第一節(jié)

走進(jìn)Linq-Linq to SQL源代碼賞析 Table的獲取過程

走進(jìn)Linq-Linq to SQL源代碼賞析之Provider的初始化

走進(jìn)Linq-Linq to SQL源代碼賞析,通過Linq to SQL看Linq


C#對(duì)Linq的語言層面支持

使用

result = books.Where(book=>book.Title.StartsWith("I"))
                .OrderBy(book
=>book.Price)
                .Select(book
=>new{Key=book.Title,Value=book.Price});

系列文章導(dǎo)航:

走進(jìn)Linq--Linq橫空出世篇

走進(jìn)Linq-輝煌的背后

走進(jìn)Linq-Linq大觀園

不能不說的C#特性-對(duì)象集合初始化器

不能不說的C#特性-匿名類型與隱式類型局部變量

不能不說的C#特性-擴(kuò)展方法

不能不說的C#特性-匿名方法和Lambda表達(dá)式

不能不說的C#特性-迭代器(上)及一些研究過程中的副產(chǎn)品

不能不說的C#特性-迭代器(下),yield以及流的延遲計(jì)算

走進(jìn)Linq-Linq to Objects(上)基礎(chǔ)篇

走進(jìn)Linq-Linq to Objects(下)實(shí)例篇

走進(jìn)Linq-Linq to SQL感性認(rèn)識(shí)篇

走進(jìn)Linq-Linq to SQL How do I(1)

走進(jìn)Linq-Linq to SQL How do I(2)

走進(jìn)Linq-Linq to SQL How do I(3)

走進(jìn)Linq-How do I(4)拾遺補(bǔ)零篇第一節(jié)

走進(jìn)Linq-Linq to SQL源代碼賞析 Table的獲取過程

走進(jìn)Linq-Linq to SQL源代碼賞析之Provider的初始化

走進(jìn)Linq-Linq to SQL源代碼賞析,通過Linq to SQL看Linq


廢話那么多了,還是來幾個(gè)HelloWorld式的程序吧

HelloWorld Linq

(下面所有程序的Book就是本系列文章中第一篇所出現(xiàn)的Book類)

有一個(gè)Book集合,但是這個(gè)集合具體存儲(chǔ)哪里我們并不清楚,也許在內(nèi)存,也許在數(shù)據(jù)庫,也許在XML存儲(chǔ),我們要做的就是把價(jià)格大于50的給揪出來,然后按照價(jià)格排序。

Linq to Objects(從內(nèi)存中的集合里查找)

數(shù)據(jù)準(zhǔn)備階段

//這樣的一個(gè)集合,存儲(chǔ)在內(nèi)存中
IList<Book> books = new List<Book> { 
    
new Book { Title = "Inside COM", ISBN = "123-456-789",Price=20 },
    
new Book { Title = "Inside C#", ISBN = "123-356-d89",Price=100 },
    
new Book { Title = "Linq", ISBN = "123-d56-d89", Price = 120 }
};

it知識(shí)庫走進(jìn)Linq-Linq大觀園,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 永川市| 奉节县| 涞源县| 溧水县| 晋中市| 耿马| 忻城县| 侯马市| 永登县| 肇源县| 太康县| 正定县| 屯昌县| 九寨沟县| 潞西市| 黄浦区| 邵武市| 兴山县| 汾阳市| 玛沁县| 马鞍山市| 历史| 郧西县| 共和县| 大同县| 德州市| 麻城市| 白沙| 图木舒克市| 新田县| 乐陵市| 平和县| 娱乐| 县级市| 陆丰市| 五常市| 伊金霍洛旗| 聂拉木县| 河池市| 九台市| 弥勒县|