var q = from o in db.Orders
from p in db.Products
join d in db.OrderDetails
on new { o.OrderID, p.ProductID } equals new { d.OrderID, d.ProductID }
into details
from d in details
select new { o.OrderID, p.ProductID, d.UnitPrice };
Orders、Products、OrderDetails 三表。OrderID + ProductID 複合鍵,使用匿名類型建構左右鍵,確保結構一致。into details + from d in details 實現 GroupJoin + SelectMany 效果(左外部連接語意)。轉譯 SQL:
SELECT [t0].[OrderID], [t1].[ProductID], [t2].[UnitPrice]
FROM [dbo].[Orders] AS [t0], [dbo].[Products] AS [t1], [dbo].[Order Details] AS [t2]
WHERE ([t0].[OrderID] = [t2].[OrderID]) AND ([t1].[ProductID] = [t2].[ProductID])
C# 3.0 入門系列至此接近尾聲,已涵蓋 LINQ to SQL 核心查詢操作:
Union、In、Like、其他彙總函數歡迎讀者留言提出感興趣的主題或疑問。寫作過程也是知識整理與表達能力的鍛鍊,難免疏漏,請不吝指正。