一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

走進Linq-Linq大觀園

系列文章導航:

走進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


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

經過幾天的閉關編程大師又有了一些新的覺悟了,不管對DSL還是命令式編程和函數式編程都有了新的理解。如是他又接著了漫長的云游。第一站當然就是那個曾經讓他結下心結的那個剛畢業的coder。

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

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

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

/// 
    
/// 一個通用的泛型委托,代表接受一個參數并有一個返回值的方法
    
/// 
    
/// 輸入參數類型
    
/// 返回值類型
    
/// 輸入參數
    
/// 返回值
    public delegate TOutput MyDelegate<TInput,TOutput>(TInput input);
    
/// 
    
/// 這個類是包含有對IEnumerable接口的一系列擴展方法
    
/// 因為在.NET里所有的集合類都實現了IEnumerable接口
    
/// 所以對該接口的擴展將擴散到所有集合
    
/// 
    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風格的移植
}

系列文章導航:

走進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


Coder一邊展示著代碼,一邊念叨著,這里是因為使用了“擴展方法”所以可以這樣寫,這里使用了Lambda表達式,它可以簡化匿名方法的寫法,這里......

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

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

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

在.NET 3.5發布的時候,微軟新發布了幾個dll,其中有一個就叫做System.Core.dll,在這個dll下對一些System命名空間做了進一步擴展。

在System.Core.dll下的System命名空間下你會發現有這么幾個泛型的委托:

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

系列文章導航:

走進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


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

程序=代碼+數據

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

Coder:程序中自己構造的一些集合對象,像我剛才的代碼中那樣,還有數據庫,這個使我們平時用到最多的,還有XML存儲,還有WebService,這個來源于遠程的數據,還有什么RSS啦等等,很多了。

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

Coder:聽起來是個很美妙的事情,這不會是在做夢吧。

大師:不是在做夢,今天你已經有了這些方法

在.NET 3.5里微軟還發布了另外兩個dll:

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

在System.Data.Linq.dll里,對數據庫的查詢做了支持,不過目前微軟提供的只支持Sql Server,感謝開源社區,現在有了DbLinq,它提供了對MySql,Oracle,Sql Server,PostgreSql,Sqlite的支持。

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

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

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

系列文章導航:

走進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


C#對Linq的語言層面支持

使用

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

系列文章導航:

走進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


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

HelloWorld Linq

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

有一個Book集合,但是這個集合具體存儲哪里我們并不清楚,也許在內存,也許在數據庫,也許在XML存儲,我們要做的就是把價格大于50的給揪出來,然后按照價格排序。

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

數據準備階段

//這樣的一個集合,存儲在內存中
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知識庫走進Linq-Linq大觀園,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 午夜丁香婷婷 | 精品国产夜色在线 | 中国欧美日韩一区二区三区 | 七七国产福利在线二区 | 一级做a爰片久久毛片看看 一级做a爰片久久毛片毛片 | 久久精品国产无限资源 | 91麻豆精品国产91久久久 | 中文字幕久久综合伊人 | 麻豆久久 | 国内精品久久久久久影院8f | 亚洲成a人片在线网站 | 色综合色综合色综合色综合 | 国产成人精品午夜在线播放 | 四虎精品视频在线永久免费观看 | 五月激情久久 | 午夜激情视频免费 | 99成人免费视频 | 久久九九视频 | 国产精品久草 | 午夜精品乱人伦小说区 | 国产小视频免费 | 国产精品吹潮香蕉在线观看 | 亚洲丶国产丶欧美一区二区三区 | 国产精品久久久久久一区二区三区 | 亚洲女人的天堂 | 成年黄网站色视频免费观看 | 中文字幕精品亚洲无线码二区 | 色老板在线永久免费视频凹凸 | 99久女女精品视频在线观看 | 伊人久久网国产伊人 | 综合区小说区图片区在线一区 | 免费黄色视屏 | 欧美成a人免费观看久久 | 91精品久久久久久久99蜜桃 | 色婷婷在线视频观看 | 一区二区三区在线看 | 九九精品在线播放 | 国产视频高清在线 | 啪啪色网| 国产精品久久久福利 | 在线免费一区二区 |