LINQ to SQL 以左側資料表為主建立實體物件。Right Join 以右表為基礎,左表無對應時填 null,但 null 物件無法存取其他屬性,故語意不通,僅支援 Inner Join、Left Outer Join(透過 GroupJoin 實現)。
| 查詢語法特徵 | 轉譯 API | 說明 |
|---|---|---|
有 join、無 into |
Join |
內部連接,產生扁平結果 |
無 join/into、有 EntitySet 導覽屬性 |
SelectMany |
利用映射關聯隱式連接 |
有 join 且有 into |
GroupJoin |
群組連接,產生分群結果 |
// 查詢語法
var q = from c in db.Customers
join o in db.Orders on c.CustomerID equals o.CustomerID
select new { c.CustomerID, o.EmployeeID };
// 方法語法(編譯器轉譯結果)
var q = db.Customers.Join(
db.Orders,
c => c.CustomerID, // 外部鍵選擇器
o => o.CustomerID, // 內部鍵選擇器
(c, o) => new { c.CustomerID, o.EmployeeID } // 結果選擇器
);
inner 表、outerKeySelector、innerKeySelector、resultSelector。equals 左右順序不可互換(左為外部、右為內部)。轉譯 SQL:
SELECT [t0].[CustomerID], [t1].[EmployeeID]
FROM [Customers] AS [t0]
INNER JOIN [Orders] AS [t1] ON [t0].[CustomerID] = [t1].[CustomerID]
101 Samples 中提供四個 SelectMany 範例,核心條件:無 join/into、出現 EntitySet。下節將逐一解析。