2009-09-24 53 views
0

基本上我希望能夠重新創建此查詢中的LINQLINQ到SQL多個左聯接使用多個域和子查詢

SELECT * 
FROM Customers 

LEFT JOIN Orders LastOrder 
ON LastOrder.CustomerId = Customers.CustomerId 
&& LastOrder.CreatedOn = (Select MAX(CreatedOn) FROM Orders WHERE CustomerId = Customers.CustomerId) 

LEFT JOIN OrderStatus 
ON OrderStatus.OrderStatusId = LastOrder.OrderStatusId 
+0

是FK關係,建立客戶與訂單和orderstatus之間的數據庫? – Keith 2009-09-24 15:52:43

回答

1

這應該是等價的:

from c in dc.Customers 
join o1 in dc.Orders 
on 
new { o1.CustomerId, 
     (from inner 
     in dc.Orders 
     where inner.CustomerId == c.CustomerId 
     select inner.CreatedOn).Max() 
    } 
equals 
new { c.CustomerId, 
     o1.CreatedOn 
    } 
join o2 in dc.Orders 
on 
o1.OrderStatusId == o2.OrderStatusId 
into joined 
select joined 
+0

謝謝我得到這個工作與一些調整 - 我無法得到這個版本編譯確實做範圍問題。這相當於我最終使用的。 從C中dc.Customers 上 新{c.CustomerId在dc.Orders 加入O1,Createdon = (從內 在dc.Orders 其中inner.CustomerId == c.CustomerId 選擇inner.CreatedOn )。最大() } 等於 新{o1.CustomerId, o1.CreatedOn } 到C01 從中的Z c01.DefaultIfEmpty() 上加入dc.Orders O2 z1.OrderStatusId == O2 .OrderStatusId 進入 精選加盟 – 2009-09-24 16:43:41

+0

@Jeremy Coenen酷!真高興你做到了。我在瀏覽器中寫過它,所以很抱歉有任何錯誤。 – 2009-09-24 18:42:09