Linq to SQL多个左连接使用多个字段和子查询

时间:2009-09-24 15:49:28

标签: c# linq linq-to-sql

基本上我希望能够在Linq中重新创建此查询

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

1 个答案:

答案 0 :(得分: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