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

















