第五個例子為composite key.
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};
這裡,它使用三個表,並且用匿名類來表示它們之間的關系。因為,其之間的關系已經不是一個鍵可以描述清楚的,所以只有用匿名類,表示組合鍵。這個例子有點像SelectMany中的ManyToMany的那個。
還有一種composite key的,就是兩個表之間是用composite key表示關系的。這種情況很簡單,不需像該例中使用匿名類。該例翻譯的T-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])
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 2.0.20612.0
最後一個例子,沒有看出什麼好玩的來,不講了。
寫到這裡,c#3.0的入門系列已經接近尾聲了。我們一起學習了Dlinq的最基本操作。還剩下Union, In, Like還有一些聚合函數等操作。將會在下面幾章中介紹。不知道大家對什麼還感興趣的,或者我能夠提供幫助的,盡管問。
關於Linq To Sql 中的,Create, update, Delete 操作,以及Store procedure 及UDF等,更像是運用函數,而不是語言。所以,不在C#語言中講。在考慮是不是開個什麼Linq To Sql的深入應用。
寫blog是對自己個人知識的總結,也是對自己表達功底的考驗。因本人水平有限,錯誤再所難免,還請大家指出並諒解。