Linq聯(lián)接數(shù)據(jù)淺談
學(xué)習(xí)Linq時(shí),經(jīng)常會遇到Linq聯(lián)接數(shù)據(jù)問題,這里將介紹Linq聯(lián)接數(shù)據(jù)問題的解決方法。
Linq聯(lián)接數(shù)據(jù)(JOIN 或 GROUP JOIN):
您可以使用多種方法將多個數(shù)據(jù)源組合到 From 子句中。Join 關(guān)鍵字等效于 SQL 中的 INNER JOIN。它基于兩個集合中的元素之間的匹配鍵值對這兩個集合進(jìn)行組合。例如:以下查詢姓氏以元音開頭的學(xué)生:
- Dim vowels() As String = {"A", "E", "I", "O", "U"}
- Dim vowelNames = From student In students, vowel In vowels _
- Where student.Last.IndexOf(vowel) = 0 _
- select Name = student.First & " " & _
- student.Last, Initial = vowel _
- Order By Initial
或者:
- Dim vowelNames2 = From student In students _
- Join vowel In vowels _
- On student.Last(0) Equals vowel _
- Select Name = student.First & " " & _
- student.Last, Initial = vowel _
- Order By Initial
Linq聯(lián)接數(shù)據(jù)相當(dāng)于SQL中的LEFT OUTER JOIN,將多個集合組合為單個分層集合。
可以在查詢中使用多個 Join 子句,以便將兩個或更多集合聯(lián)接為單個集合。
在不使用 Join 子句的情況下,可以執(zhí)行隱式聯(lián)接來組合集合。為此,應(yīng)在 From 子句中包括多個 In 子句,并指定標(biāo)識要用于聯(lián)接的鍵的 Where 子句。
完整語法:
- Group Join element [As type] In collection _
- On key1 Equals key2 [ And key3 Equals key4 [... ] ] _
- Into expressionList
其中,expressionList是必須的,是一個或多個表達(dá)式,標(biāo)識對集合中的元素組進(jìn)行聚合的方式。若要為分組結(jié)果標(biāo)識一個成員名稱,可使用 Group 關(guān)鍵字 (<alias> = Group)。
Linq聯(lián)接數(shù)據(jù) 運(yùn)算將返回 Linq聯(lián)接數(shù)據(jù) 運(yùn)算符左側(cè)標(biāo)識的集合中的所有結(jié)果。即使要聯(lián)接的集合中沒有匹配項(xiàng),也是如此。這與 SQL 中的 LEFT OUTER JOIN 類似。
【編輯推薦】