Нужен ли Row_Number () в этом случае?
Далее возвращается самый последний заказ для всех клиентов в базе данных Northwind:
from c in Customers
join o in Orders on c.CustomerID equals o.CustomerID
group o by new { c.CustomerID, c.ContactName} into g
select new {
CustomerID = g.Key.CustomerID,
Name = g.Key.ContactName,
OrderDate = g.Max(a=> a.OrderDate)
}
Создан запрос (из LinqPad)
SELECT MAX([t1].[OrderDate]) AS [OrderDate], [t0].[CustomerID], [t0].[ContactName] AS [Name]
FROM [Customers] AS [t0]
INNER JOIN [Orders] AS [t1] ON [t0].[CustomerID] = [t1].[CustomerID]
GROUP BY [t0].[CustomerID], [t0].[ContactName]
Вместо этого он выполняет левое соединение
from c in Customers
join o in Orders on c.CustomerID equals o.CustomerID into g
from a in g.DefaultIfEmpty()
group a by new { c.CustomerID, c.ContactName} into g
select new
{
g.Key.CustomerID,
g.Key.ContactName,
RecentOrder = g.Max(a=> a.OrderDate)
}
и сгенерированный запрос
SELECT MAX([t1].[OrderDate]) AS [RecentOrder], [t0].[CustomerID], [t0].[ContactName]
FROM [Customers] AS [t0]
LEFT OUTER JOIN [Orders] AS [t1] ON [t0].[CustomerID] = [t1].[CustomerID]
GROUP BY [t0].[CustomerID], [t0].[ContactName]