首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 3.0 入門系列(十):Join 核心 API——Join、SelectMany、GroupJoin 三大轉譯規則與基本 Inner Join

     編輯:關於C語言

為何不支援 Right Join?

LINQ to SQL 以左側資料表為主建立實體物件。Right Join 以右表為基礎,左表無對應時填 null,但 null 物件無法存取其他屬性,故語意不通,僅支援 Inner Join、Left Outer Join(透過 GroupJoin 實現)。

三大 Join 相關 API 對應規則

查詢語法特徵轉譯 API說明
有 join、無 into Join 內部連接,產生扁平結果
無 join/into、有 EntitySet 導覽屬性 SelectMany 利用映射關聯隱式連接
有 join 且有 into GroupJoin 群組連接,產生分群結果

基本 Inner Join:Join API 範例

// 查詢語法
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]

SelectMany 四大範例預覽

101 Samples 中提供四個 SelectMany 範例,核心條件:無 join/into、出現 EntitySet。下節將逐一解析。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved