LINQ查詢(xún)子句學(xué)習(xí)筆記
學(xué)習(xí)LINQ查詢(xún)時(shí),經(jīng)常會(huì)遇到LINQ查詢(xún)子句問(wèn)題,這里將介紹LINQ查詢(xún)子句問(wèn)題的解決方法。
制定數(shù)據(jù)源(FROM):
在LINQ查詢(xún)子句中,第一步是指定要查詢(xún)的數(shù)據(jù)源。因此,查詢(xún)中的 From 子句總是最先出現(xiàn)。語(yǔ)法是:FROM 范圍變量 in 數(shù)據(jù)源 ,范圍變量類(lèi)似于循環(huán)迭代變量,但在查詢(xún)表達(dá)式中,實(shí)際上不發(fā)生迭代。執(zhí)行查詢(xún)(通常使用 For Each 循環(huán)執(zhí)行)時(shí),范圍變量將用作對(duì) 數(shù)據(jù)源集合中的每個(gè)元素的引用。From 子句用于標(biāo)識(shí)查詢(xún)的源數(shù)據(jù),以及用于引用源集合中元素的變量。這些變量稱(chēng)為范圍變量。可以指定查詢(xún)中的多個(gè) From 子句,以標(biāo)識(shí)要聯(lián)接的多個(gè)集合。指定多個(gè)集合時(shí),將單獨(dú)循環(huán)訪(fǎng)問(wèn)這些集合,或者如果這些集合是相關(guān)的,則可以聯(lián)接它們。您可以通過(guò)使用 Select 子句隱式聯(lián)接集合,或者通過(guò)使用 Join 或 Group Join 子句顯式聯(lián)接集合。或者,您可以在單個(gè) From 子句中指定多個(gè)范圍變量和集合,并用逗號(hào)將每個(gè)相關(guān)的范圍變量和集合分隔開(kāi)。每個(gè) From 子句后面可跟其他LINQ查詢(xún)子句的任意組合以?xún)?yōu)化查詢(xún)。
范圍變量,用于在查詢(xún)循環(huán)訪(fǎng)問(wèn) 集合 時(shí),引用 集合 的每個(gè)成員。必須為可枚舉類(lèi)型。
范圍變量的類(lèi)型可選。如果不指定 類(lèi)型,則編譯器自動(dòng)根據(jù)集合推斷范圍變量的類(lèi)型。后續(xù) From 子句可以引用 From 子句中的范圍變量,或者它們可以引用以前的 From 子句中的范圍變量。
- Dim allOrders = From cust In GetCustomerList() _ From ord In cust.Orders _ Select ord
篩選數(shù)據(jù)(WHERE):
Where子句用于執(zhí)行篩選。篩選器指定要在結(jié)果序列中包含數(shù)據(jù)源中的哪些元素,可以使用邏輯運(yùn)算符(如 And、Or、AndAlso、OrElse、Is 和 IsNot)可以將多個(gè)表達(dá)式組合在一個(gè)Where子句中。
默認(rèn)情況下,查詢(xún)表達(dá)式直到被訪(fǎng)問(wèn)時(shí)才計(jì)算結(jié)果。因此,在訪(fǎng)問(wèn)查詢(xún)前,不會(huì)計(jì)算Where子句。所以如果值位于Where子句中使用的查詢(xún)外部,請(qǐng)確保查詢(xún)執(zhí)行時(shí)在Where子句中使用適當(dāng)?shù)闹怠?/P>
您可以在Where子句中調(diào)用函數(shù),以便對(duì)集合中當(dāng)前元素的值執(zhí)行計(jì)算或運(yùn)算。在Where子句中調(diào)用函數(shù)可使查詢(xún)?cè)诙x后立即執(zhí)行,而不是在訪(fǎng)問(wèn)時(shí)執(zhí)行。
【編輯推薦】