天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

Linq學(xué)習(xí)筆記

  寫在前面

  其實(shí)在09年就已經(jīng)學(xué)習(xí)過Linq了,并被她那優(yōu)美的語法所吸引,只是現(xiàn)在所在的公司還在使用VS2005在.NET2.0的框架下面的開發(fā),所以Linq也很久沒有用過了,最近看部門的同事對(duì)這個(gè)有些興趣,所以打算整理點(diǎn)東西出來跟大家一起做個(gè)分享。

  什么是Linq

  LINQ是Language Integrated Query的簡稱,它是集成在.NET編程語言中的一種特性。已成為編程語言的一個(gè)組成部分,在編寫程序時(shí)可以得到很好的編譯時(shí)語法檢查,豐富的元數(shù)據(jù),智能感知、靜態(tài)類型等強(qiáng)類型語言的好處。并且它同時(shí)還使得查詢可以方便地對(duì)內(nèi)存中的信息進(jìn)行查詢而不僅僅只是外部數(shù)據(jù)源。

  Linq包括Linq to Objects, Linq to SQL,Linq to XML, Linq to DataSet等,本篇從Linq to Objects開始了解Linq的皮毛。

  開始Linq前你要知道的

  擴(kuò)展方法

  顧名思義就是對(duì)現(xiàn)有類進(jìn)行擴(kuò)展的的方法,擴(kuò)展方法可以在不修改現(xiàn)有類的情況下,為現(xiàn)有類增加公共的接口(不是C#中的interface)。

  擴(kuò)展方法本質(zhì)上是一個(gè)靜態(tài)方法,不同之處在于它的第一個(gè)參數(shù)必須有this關(guān)鍵字聲明,并且第一個(gè)參數(shù)的類型即為要擴(kuò)展的類型。如

public static double ToDouble(this string source){    double res = 0d;    double.TryParse(source, out res);    return res;}public static void SimpleExtesionMethod(){    double d = "12345.54321".ToDouble();    Console.WriteLine(d);}

  這里是個(gè)簡單的將字符串轉(zhuǎn)為double類型的擴(kuò)展方法,只要引用了該方法的命名空間,則都可以直接用string類型來調(diào)用ToDouble方法。

  擴(kuò)展方法是后文的基礎(chǔ),C#3.0中的Linq的實(shí)現(xiàn)都是基于擴(kuò)展方法,通過對(duì)IEnumerable<T>接口(Linq to Objects)的擴(kuò)展和對(duì)IQueryable<T>的擴(kuò)展來實(shí)現(xiàn)Linq的相關(guān)功能,而Linq的相關(guān)關(guān)鍵字最終都是轉(zhuǎn)化為對(duì)IEnumerable<T>(IQueryable<T>)的調(diào)用。

  Lambda表達(dá)式

  lambda表達(dá)式其實(shí)就是.NET2.0中的匿名方法,然后再3.0中以一種更優(yōu)美的姿態(tài)呈現(xiàn)出來。

  lambda表達(dá)式的基本語法為

  (參數(shù)列表) =>{語句塊;}    或者

  ( 參數(shù)列表) =>表達(dá)式

  當(dāng)參數(shù)列表中只有一個(gè)參數(shù)的時(shí)候,圓括號(hào)可以省略

Func<string, string> func = x => x + x;Console.WriteLine(func("a")); 

  Var:隱式類型化變量

  使用與可以由編譯器推導(dǎo)出的變量的聲明,不需要顯式指定對(duì)象的類型。

var container = new List<string> { "張三", "李四", "王五" };IEnumerable<string> query = from name in container            select name;

  上例中由于定義中已經(jīng)指明了對(duì)象的類型,聲明中已經(jīng)完全沒有必要使用顯示的類型定義,所以可以使用var關(guān)鍵字。

  對(duì)于匿名對(duì)象

var test = new { Name = "Sth.", Type = "UnKnown" };

  由于無法用一個(gè)類型類聲明匿名對(duì)象,此時(shí)可以用var是聲明。

  注意var只是省下了顯式聲明的過程,而C#本身就是靜態(tài)語言,所以var所聲明的變量的類型已經(jīng)確定任然是不能改變的,亦即,var并非是變體類型。

  Linq對(duì)誰適用

  linq的語法通過System.Linq下面的Enumerable類提供支持,通過觀察他的簽名,你就會(huì)發(fā)現(xiàn)他為IEnumerable<T>實(shí)現(xiàn)了一系列的擴(kuò)展方法,也就是說,只要是實(shí)現(xiàn)了IEnumerable<T>的對(duì)象都可以使用Linq的語法來查詢。

  而對(duì)于只實(shí)現(xiàn)了IEnumerable接口而沒有實(shí)現(xiàn)IEnumerable<T>的對(duì)象可以通過

public static IEnumerable<TResult> Cast<TResult>(this IEnumerable source);        
        

NET技術(shù)Linq學(xué)習(xí)筆記,轉(zhuǎn)載需保留來源!

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

主站蜘蛛池模板: 经典三级四虎在线观看 | 色橹橹欧美在线观看视频高清 | 超污视频带污疼免费视频 | 99精品视频免费在线观看 | 久久99精品久久久久久园产越南 | 女王黄金vk | 最新国产av.在线视频 | 好男人在线观看免费视频WWW | 樱花之恋动漫免费观看 | 看免费人成va视频全 | 亚洲日韩成人 | 久久精品国产免费中文 | 717影院理论午夜伦不卡久久 | 狠狠综合久久综合88亚洲 | 俄罗斯6一9泑女网站 | 亚洲人成在线播放无码 | 国产人人为我我为人人澡 | 青青久久久 | 漂亮的保姆3集电影免费观看中文 | 国产精品视频免费观看 | 日本一卡二卡三卡四卡无卡免费播放 | 伊人精品影院 | 亚洲国产成人精品久久久久 | 亚洲国产精品综合久久一线 | 国产精品亚洲在钱视频 | 野花视频在线观看免费最新动漫 | 亚洲精品AV无码重口另类 | 超碰在线vip | 毛片免费大全 | 高潮久久久久久久久不卡 | 一个人在线观看视频免费 | 放射源分类办法 | 又亲又揉摸下面视频免费看 | 男人把女人桶到高潮嗷嗷叫 | 伊人久久大香 | 78m成人亚洲 | 厨房玩朋友娇妻中文字幕 | 亚洲AV福利天堂一区二区三 | 亚洲AV噜噜狠狠网址蜜桃尤物 | 黑丝美女被人操 | 在线 无码 中文 强 乱 |