標(biāo)準(zhǔn)查詢(xún)操作符概述及剖析
標(biāo)準(zhǔn)查詢(xún)操作符簡(jiǎn)介
為了查看執(zhí)行中的語(yǔ)言集成查詢(xún),我們將從一個(gè)簡(jiǎn)單的 C# 3.0 程序開(kāi)始,該程序使用標(biāo)準(zhǔn)的查詢(xún)操作符來(lái)處理數(shù)組的內(nèi)容:
- using System;
- using System.Query;
- using System.Collections.Generic;
- class app {
- static void Main() {
- string[] names = { "Burke", "Connor", "Frank",
- "Everett", "Albert", "George",
- "Harris", "David" };
- IEnumerable expr = from s in names
- where s.Length == 5
- orderby s
- select s.ToUpper();
- foreach (string item in expr)
- Console.WriteLine(item);
- }
- }
如果您編譯并運(yùn)行該程序,將看到以下輸出:
- BURKE
- DAVID
- FRANK
標(biāo)準(zhǔn)查詢(xún)操作符工作原理
要了解語(yǔ)言集成查詢(xún)?nèi)绾喂ぷ?,我們需要剖析該程序的第一個(gè)語(yǔ)句。
- IEnumerable expr = from s in names
- where s.Length == 5
- orderby s
- select s.ToUpper();
使用一個(gè)查詢(xún)表達(dá)式 初始化局部變量 expr。通過(guò)應(yīng)用一個(gè)或多個(gè)標(biāo)準(zhǔn)查詢(xún)操作符或特定于域的操作符,查詢(xún)表達(dá)式可以操作一個(gè)或多個(gè)信息源。該表達(dá)式使用了三個(gè)標(biāo)準(zhǔn)查詢(xún)操作符:Where、OrderBy 和 Select。
Visual Basic 9.0 也支持 LINQ。以下是以 Visual Basic 9.0 編寫(xiě)的上述語(yǔ)句:
- Dim expr As IEnumerable(Of String) = _
- Select s.ToUpper() _
- From s in names _
- Where s.Length = 5 _
- Order By s
這里顯示的 C# 和 Visual Basic 語(yǔ)句均使用查詢(xún)語(yǔ)法。與 foreach 語(yǔ)句一樣,查詢(xún)語(yǔ)法是一個(gè)方便的聲明性代碼縮寫(xiě),您可以手動(dòng)編寫(xiě)它。上述語(yǔ)句在語(yǔ)義上與以下所示的以 C# 編寫(xiě)的顯式語(yǔ)法完全相同:
- IEnumerable expr = names
- .Where(s => s.Length == 5)
- .OrderBy(s => s)
- .Select(s => s.ToUpper());
Where、OrderBy 和 Select 操作符的參數(shù)稱(chēng)為 λ 表達(dá)式,它們是類(lèi)似于委托的代碼片段。它們?cè)试S將標(biāo)準(zhǔn)查詢(xún)操作符單獨(dú)定義為方法,并使用點(diǎn)標(biāo)記串連在一起。這些方法共同構(gòu)成了可擴(kuò)展查詢(xún)語(yǔ)言的基礎(chǔ)。
【編輯推薦】