LINQ查詢(xún)操作全面分析
學(xué)習(xí)LINQ查詢(xún)時(shí),經(jīng)常會(huì)遇到LINQ查詢(xún)操作問(wèn)題,這里將介紹LINQ查詢(xún)操作問(wèn)題的解決方法。
語(yǔ)言集成查詢(xún) (LINQ) 是 Visual Studio 2008 和 .NET Framework 3.5 版中一項(xiàng)突破性的創(chuàng)新,它在對(duì)象領(lǐng)域和數(shù)據(jù)領(lǐng)域之間架起了一座橋梁。
傳統(tǒng)上,針對(duì)數(shù)據(jù)的查詢(xún)都是以簡(jiǎn)單的字符串表示,而沒(méi)有編譯時(shí)類(lèi)型檢查或 IntelliSense 支持。此外,您還必須針對(duì)以下各種數(shù)據(jù)源學(xué)習(xí)不同的查詢(xún)語(yǔ)言:SQL 數(shù)據(jù)庫(kù)、XML 文檔、各種 Web 服務(wù)等。LINQ 使查詢(xún)成為 C# 和 Visual Basic 中的一等語(yǔ)言構(gòu)造。您可以使用語(yǔ)言關(guān)鍵字和熟悉的運(yùn)算符針對(duì)強(qiáng)類(lèi)型化對(duì)象集合編寫(xiě)查詢(xún)。用 C# 語(yǔ)言編寫(xiě)的、不完整的 LINQ 查詢(xún),該查詢(xún)針對(duì) SQL Server 數(shù)據(jù)庫(kù),并具有完全類(lèi)型檢查和 IntelliSense 支持。
LINQ查詢(xún)操作由以下三個(gè)操作組成:
1、獲取數(shù)據(jù)源:支持泛型 IEnumerable(Of (T)) 接口的所有對(duì)象都可以作為L(zhǎng)INQ的數(shù)據(jù)源,包括Array、List等。
2、創(chuàng)建查詢(xún):指定要從數(shù)據(jù)源中檢索的哪些信息,還可以指定在返回這些信息之前如何對(duì)其進(jìn)行排序、分組或結(jié)構(gòu)化。創(chuàng)建(定義)的查詢(xún)通常存儲(chǔ)在變量中,并不會(huì)在定義時(shí)馬上執(zhí)行而是在以后執(zhí)行。所以記?。翰樵?xún)變量本身不會(huì)執(zhí)行任何操作,也不會(huì)返回任何數(shù)據(jù),它只是存儲(chǔ)查詢(xún)定義。
3、執(zhí)行查詢(xún):執(zhí)行查詢(xún)有兩種情況,1是延遲執(zhí)行;2是立即執(zhí)行。
3.1、延遲執(zhí)行:查詢(xún)定義并保存在查詢(xún)定義變量后,不馬上執(zhí)行,而是在后續(xù)需要時(shí)才執(zhí)行。這通常需要使用 For Each 循環(huán)(它返回值序列)或應(yīng)用標(biāo)準(zhǔn)查詢(xún)運(yùn)算符。對(duì)于值序列,可使用 For Each 循環(huán)中的迭代變量(在上一個(gè)示例中為 number)訪問(wèn)所檢索的數(shù)據(jù)。
3.2、立即執(zhí)行:在立即執(zhí)行過(guò)程中,查詢(xún)?cè)诙x時(shí)執(zhí)行。當(dāng)應(yīng)用需要訪問(wèn)查詢(xún)結(jié)果的各個(gè)元素的方法時(shí),就會(huì)觸發(fā)執(zhí)行。通常使用能夠返回單個(gè)值的標(biāo)準(zhǔn)查詢(xún)運(yùn)算符之一來(lái)強(qiáng)制立即執(zhí)行。Count、Max、Average 和 First 就屬于標(biāo)準(zhǔn)查詢(xún)運(yùn)算符。只要應(yīng)用了這些標(biāo)準(zhǔn)查詢(xún)運(yùn)算符以便計(jì)算并返回單一實(shí)例結(jié)果,這些運(yùn)算符就會(huì)立即執(zhí)行查詢(xún)。例如:
- Dim numbers中的偶數(shù)個(gè)數(shù) = (From num In numbers _
- Where num Mod 2 = 0 _
- Select num).Count()
還可通過(guò)對(duì)查詢(xún)(立即執(zhí)行)或查詢(xún)變量(延遲執(zhí)行)調(diào)用 ToList 或 ToArray 方法來(lái)強(qiáng)制執(zhí)行查詢(xún),如下面的代碼所示:
- Dim evensList = (From num In numbers _
- Where num Mod 2 = 0 _
- Select num).ToList()
以上介紹LINQ查詢(xún)操作
【編輯推薦】