LINQ; как получить запись с максимальной датой с присоединением?

Как это сделать в LINQ?

select
    *
from customer c
left join order o on o.CustomerID = c.CustomerID
where o.OrderDate = (select MAX(OrderDate) from order where CustomerID = o.CustomerID )

не беспокойтесь о дублях, так как всегда будет только один заказ в день.

Я добрался до левого соединения в LINQ, но не знаю, как и где поместить подзапрос.

var query = from customer in clist
            from order in olist
               .Where(o => o.CustomerID == customer.CustomerID)
            select new {
                customer.CustomerID,
                customer.Name,
                customer.Address,
                Product = order != null ? order.Product : string.Empty
            };

ОКОНЧАТЕЛЬНОЕ РЕШЕНИЕ:

var query = from customer in clist
            from order in olist
           .Where(o => o.CustomerID == customer.CustomerID && o.OrderDate ==
                olist.Where(o1 => o1.CustomerID == customer.CustomerID).Max(o1 => o1.OrderDate)
            )
            select new {
                customer.CustomerID,
                customer.Name,
                customer.Address,
                order.Product,
                order.OrderDate
            };

Еще одно решение без каких-либо лямбда-выражений

var query = from customer in clist
            from order in olist 
            where order.CustomerID == customer.CustomerID && order.OrderDate == 
                (from o in olist 
                 where o.CustomerID == customer.CustomerID 
                 select o.OrderDate).Max()
            select new {
                customer.CustomerID,
                customer.Name,
                customer.Address,
                order.Product,
                order.OrderDate
            };
12
задан mfc 8 May 2012 в 07:17
поделиться