2009-09-24 35 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