聯結作業
將兩個資料來源「聯結」(Join),就是指將某個資料來源中的物件與另一個資料來源中擁有共同屬性的物件關聯在一起。
當要查詢的資料來源彼此沒有直接的關聯性時,聯結是一項很重要的作業。在物件導向程式設計中,這表示物件之間的相互關聯模式尚未建立 (如單向關聯性的反向方向)。單向關聯性的例子是,Customer 類別具有 City 型別的屬性,但是 City 類別沒有屬性可包含 Customer 物件的集合。如果您有 City 物件的清單,而且想要尋找每個城市的所有客戶,就可以使用聯結作業加以尋找。
LINQ 架構提供的聯結方法有 Join 和 GroupJoin。這些方法會執行等聯結 (Equijoin),也就是根據索引鍵相等與否,將兩個資料來源互相對應的聯結 (相較於 Transact-SQL 支援的是「等於」以外的聯結運算子,例如「小於」運算子)。 在關聯式資料庫中,Join 會實作內部聯結 (Inner Join),這種聯結只會傳回在另一端的資料集中有相符項目的物件。GroupJoin 方法在關聯式資料庫詞彙中沒有直接的對等項目,但是會實作內部聯結和左外部聯結 (Left Outer Join) 的超集。左外部聯結是指傳回第一個 (左) 資料來源中每個項目的聯結,即使它與另一個資料來源沒有相互關聯的項目也一樣。
下面的概念圖顯示了兩個集合中的完整項目,以及這兩個集合彼此進行內部聯結或左外部聯結之後剩下的項目。
方法
方法名稱 |
描述 |
C# 查詢運算式語法 |
Visual Basic 查詢運算式語法 |
詳細資訊 |
---|---|---|---|---|
Join |
根據索引鍵選取器函式聯結兩個序列,並擷取值組。 |
join … in … on … equals … |
From x In …, y In … Where x.a = y.a -或- Join … [As …]In … On … |
|
GroupJoin |
根據索引鍵選取器函式聯結兩個序列,並將每個項目產生的相符項目分組。 |
join … in … on … equals … into … |
Group Join … In … On … |
請參閱
工作
How to: Formulate Joins and Cross-Product Queries (LINQ to SQL)
HOW TO:使用複合索引鍵執行聯結 (C# 程式設計手冊)
HOW TO:排序 Join 子句的結果 (C# 程式設計手冊)