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

Linq學習筆記

  寫在前面

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

  什么是Linq

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

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

  開始Linq前你要知道的

  擴展方法

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

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

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);}

  這里是個簡單的將字符串轉為double類型的擴展方法,只要引用了該方法的命名空間,則都可以直接用string類型來調用ToDouble方法。

  擴展方法是后文的基礎,C#3.0中的Linq的實現(xiàn)都是基于擴展方法,通過對IEnumerable<T>接口(Linq to Objects)的擴展和對IQueryable<T>的擴展來實現(xiàn)Linq的相關功能,而Linq的相關關鍵字最終都是轉化為對IEnumerable<T>(IQueryable<T>)的調用。

  Lambda表達式

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

  lambda表達式的基本語法為

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

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

  當參數(shù)列表中只有一個參數(shù)的時候,圓括號可以省略

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

  Var:隱式類型化變量

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

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

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

  對于匿名對象

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

  由于無法用一個類型類聲明匿名對象,此時可以用var是聲明。

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

  Linq對誰適用

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

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

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

NET技術Linq學習筆記,轉載需保留來源!

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

主站蜘蛛池模板: 国产美女激情视频无打码 | www.四虎在线观看 | 亚洲欧美性视频 | 亚洲天堂成人在线观看 | 在线免费福利 | 美女视频永久黄网站免费观看韩国 | 在线播放亚洲 | 色老板免费观看在线播放 | 欧美色成人 | 亚洲第一区精品观看 | 国产手机国产手机在线 | 看全色黄大色大片免费 | 久久国内精品自在自线观看 | 五月婷婷在线免费观看 | 亚洲文学| 欧美 日产 国产动漫 | 欧美视频在线观看 | 三级小说第一页 | 人人做人人爽人人爱影视 | 97久久精品国产成人影院 | 亚洲国产激情 | 日韩精品片 | 国产精品欧美在线不卡 | 国产男人女人做性全过程视频 | 亚洲激情在线 | 久久久不卡国产精品一区二区 | 国产大片黄在线看免费 | 成年美女黄网站色大免费视频 | 国产亚洲综合色就色 | 激情综合图区 | 看片中文字幕 | 日韩精品中文字幕一区三区 | 欧美www在线观看 | 欧美成人久久一级c片免费 欧美成人免费sss | 视频在线国产 | 亚洲第一页视频 | 蕾丝视频成人★在线观看 | 六月婷婷精品视频在线观看 | 国产91免费在线 | 隔壁搬来黑人巨大中文字幕 | 久久久青草青青国产亚洲免观 |