1、LINQ特有的編程結(jié)構(gòu) 隱式類型本地變量:C#的var關(guān)鍵字允許定義不顯式指定實際數(shù)據(jù)類型的本地變量。不過由于編譯器將根據(jù)初始值推斷其數(shù)據(jù)類型,所有該變量仍然是強類型的。 對象和集合初始化語法:它允許我們在創(chuàng)建類或結(jié)構(gòu)變量的同時設(shè)置其屬性。 Lambda表達(dá)式:C#Lambda操作符(=>)可以用來構(gòu)建Lambda表達(dá)式,并且在調(diào)用以強類型的委托作為參數(shù)的方法時,也十分有用。 擴(kuò)展方法:C#擴(kuò)展方法不使用子類就能夠像已知類中添加新的功能。同樣,它還可以向不能有子類的密封類和結(jié)構(gòu)中添加新的功能。在編寫擴(kuò)展方法時,第一個參數(shù)必須使用this限定符,用來表示被擴(kuò)展的類型。擴(kuò)展方法只能定義在靜態(tài)類中,并且必須使用static關(guān)鍵字聲明為靜態(tài)方法。 匿名類型:該特性可以快速建立數(shù)據(jù)的“結(jié)構(gòu)”,編譯器將根據(jù)名稱/值對的結(jié)合在編譯時生成新的類。該類型是基于值的語義構(gòu)建的,因此System.object中的每個虛方法都要重寫。要定義一個匿名類型,可以聲明一個隱式類型變量,并使用對象初始化語法指定數(shù)據(jù)的結(jié)構(gòu)。 2、LINQ查詢表達(dá)式是強類型的(跟傳統(tǒng)的SQL語句有所不同)。 3、核心LINQ程序集 System.Core.dll:定義了代表核心LINQ API的類型; System.Data.DataSetExtensions.dll:定義了許多類型來將ADO.NET類型融入LINQ變成范式; System.Xml.Linq.dll:提供了使用LINQ處理XML文檔數(shù)據(jù)所需的功能。 4、將LINQ查詢應(yīng)用于原始數(shù)組 1 static void Main(string[] args) 一般來說,在獲取LINQ查詢的結(jié)果集時,應(yīng)該總是使用隱式類型。但要記住的是,在絕大多數(shù)情況下,真正的返回值是實現(xiàn)了泛型IEnumerable<T>接口的類型。 static void QueryOverInts() 5、LINQ和擴(kuò)展方法:雖然System.Array并沒有直接實現(xiàn)IEnumerable<T>接口,但它通過靜態(tài)的System.Linq.Enumerable類類型間接地得到了該類型所需的功能,同時還得到了許多其他的與LINQ相關(guān)成員。 6、延遲執(zhí)行的作用:有關(guān)LINQ查詢表達(dá)式另一個重要的地方是在我們迭代內(nèi)容之前,它們不會真正進(jìn)行運算,嚴(yán)格的說叫做延遲執(zhí)行。這個方式的好處在于可以為相同的容器多次應(yīng)用相同的LINQ查詢,而始終可以獲得最新的最好的結(jié)果。 1 static void QueryOverInts() 7、立即執(zhí)行的作用:如果希望foreach邏輯外部運算LINQ表達(dá)式,可以調(diào)用由Enumerable類型定義的許多擴(kuò)展方法來完成。Enumerable定義了諸如ToArray<T>()、ToDictionary<TSource,TKey>()以及ToList<T>()在內(nèi)的許多擴(kuò)展方法。在調(diào)用這些方法的同時將執(zhí)行LINQ查詢,以獲取數(shù)據(jù)快照。然后這些數(shù)據(jù)快照就可以獨立進(jìn)行操作了: 1 static void ImmediateExecution() 整個LINQ表達(dá)式用圓括號括起來,這樣就能將它強制轉(zhuǎn)換為正確的實際類型來調(diào)用Enumerable的擴(kuò)展方法。C#編譯器可以準(zhǔn)確檢測泛型項的類型參數(shù),我們不需要指定類型參數(shù)。 8、返回LINQ查詢的結(jié)果 9、將查詢應(yīng)用到集合對象 10、C#LINQ查詢操作符 |
|