LINQ查詢(xún)操作符淺析
LINQ有很多值得學(xué)習(xí)的地方,這里我們主要介紹LINQ查詢(xún)操作符,包括介紹LINQto Entities等方面
語(yǔ)言集成查詢(xún) (LINQ) 允許開(kāi)發(fā)人員通過(guò)強(qiáng)類(lèi)型化語(yǔ)法使用 Microsoft® .NET Framework 3.5 代碼編寫(xiě)類(lèi)似 SQL 的查詢(xún)。然后,各種LINQ提供程序,如LINQto Objects(可利用它根據(jù)對(duì)象層次結(jié)構(gòu)編寫(xiě)查詢(xún))和LINQto Entities(可利用它根據(jù)實(shí)體框架的概念模型編寫(xiě)查詢(xún))可根據(jù)代表數(shù)據(jù)存儲(chǔ)的細(xì)微差別來(lái)有效處理這些查詢(xún)。
除強(qiáng)類(lèi)型化語(yǔ)法外,LINQ查詢(xún)還具有一個(gè)標(biāo)準(zhǔn)LINQ查詢(xún)操作符庫(kù)來(lái)增強(qiáng)其功能。這些標(biāo)準(zhǔn)LINQ查詢(xún)操作符對(duì)序列進(jìn)行運(yùn)算并可執(zhí)行各種運(yùn)算,如確定序列中是否存在某個(gè)值以及對(duì)序列運(yùn)行合計(jì)函數(shù)(如求和)。
在本月的專(zhuān)欄中,我將使用LINQ來(lái)執(zhí)行實(shí)際的查詢(xún)和運(yùn)算(會(huì)用到LINQto Objects 和LINQto Entities)。我將查詢(xún)一個(gè)實(shí)體集合并使用其導(dǎo)航屬性深入研究一組具備層次結(jié)構(gòu)的實(shí)體。我還會(huì)為您演示如何對(duì)數(shù)組和集合應(yīng)用多個(gè)標(biāo)準(zhǔn)LINQ查詢(xún)操作符。并展示如何使用 lambda 表達(dá)式強(qiáng)化LINQ的標(biāo)準(zhǔn)LINQ查詢(xún)操作符,以及如何利用它們來(lái)從序列解析特定信息并對(duì)序列執(zhí)行復(fù)雜的邏輯運(yùn)算。
操作符和LINQ
LINQ自身功能非常強(qiáng)大,無(wú)論使用的是LINQto XML、LINQto DataSets、LINQto Entities、LINQto Objects 還是附帶的任何其他LINQ提供程序。LINQ的核心功能在于其強(qiáng)類(lèi)型化查詢(xún)語(yǔ)法,它可用于任意此類(lèi)提供程序。當(dāng)將LINQ與一個(gè)或多個(gè)標(biāo)準(zhǔn)LINQ查詢(xún)操作符結(jié)合使用時(shí),會(huì)得到一個(gè)功能更為強(qiáng)大的工具集,從而可精細(xì)地控制一組數(shù)據(jù)。
標(biāo)準(zhǔn)LINQ查詢(xún)操作符在 System.LINQ命名空間中的 System.Core.dll 程序集中作為靜態(tài)類(lèi) Enumerable 和 Queryable 的擴(kuò)展方法存在,并且可用于實(shí)現(xiàn) IEnumerable<T> 或 IQueryable<T> 的對(duì)象。這樣它們就能使用LINQto Entities 和LINQto SQL 之類(lèi)的提供程序?qū)Ω黝?lèi)對(duì)象執(zhí)行運(yùn)算,從內(nèi)存中的集合和數(shù)組(序列)到遠(yuǎn)程數(shù)據(jù)庫(kù)。
可輕松地確定處理特定任務(wù)時(shí)所擁有的操作符。如果要在LINQ查詢(xún)中使用操作符,可使用 Queryable 靜態(tài)類(lèi)可用擴(kuò)展方法中的操作符。如果要對(duì)實(shí)現(xiàn) IEnumerable<T> 的序列使用操作符,可使用 Enumerable 靜態(tài)類(lèi)中的一個(gè)擴(kuò)展方法。但是,請(qǐng)記?。翰⒎?Queryable 類(lèi)中的所有操作符都適用于基礎(chǔ)數(shù)據(jù)存儲(chǔ),因此運(yùn)行時(shí)可能不支持某些操作符。
操作符類(lèi)型
操作符有多種類(lèi)型(使用對(duì)象瀏覽器查看 Enumerable 和 Queryable 類(lèi)即可找到所有操作符)??衫盟鼇?lái)大致了解一下操作符所提供的功能。我將使用LINQto Objects 和LINQto Entities 展示一小組此類(lèi)操作符,以顯示它們?nèi)绾螢閷?shí)際應(yīng)用程序帶來(lái)好處。
Figure A Categories of Operators
【編輯推薦】