Solution1
Getestet habe ich diese auf LinqPad LinqToSQL mit
var data = from lt in Lots
group lt by lt.ProductId into grp
join pg in ProductGroups on grp.Key equals pg.ProductId
select new { pg.ProductId,pg.ProductName,ShipDate =grp.Max (g => g.ShipDate)};
data.Dump();
und Es produziert dieses SQL (fast wie Ihre SQL, nur Reihenfolge der Tabellen ist geschaltet
)
SELECT [t2].[ProductId], [t2].[ProductName], [t1].[value] AS [ShipDate]
FROM (
SELECT MAX([t0].[ShipDate]) AS [value], [t0].[ProductId]
FROM [Lot] AS [t0]
GROUP BY [t0].[ProductId]
) AS [t1]
INNER JOIN [ProductGroup] AS [t2] ON [t1].[ProductId] = [t2].[ProductId]
Solution2
Dies ist eine Möglichkeit, eine korrelierte Unterabfrage, die gleichen Ergebnis führt zu zwingen, wie Sie wollen, aber ohne/Gruppe beitreten, indem
var data = from pg in ProductGroups
let sd = Lots.Where (l => l.ProductId == pg.ProductId).Max(l => l.ShipDate)
select new { pg.ProductId,pg.ProductName,ShipDate =sd};
data.Dump();
und es erzeugt Dieses SQL
SELECT [t0].[ProductId], [t0].[ProductName], (
SELECT MAX([t1].[ShipDate])
FROM [Lot] AS [t1]
WHERE [t1].[ProductId] = [t0].[ProductId]
) AS [sd]
FROM [ProductGroup] AS [t0]
Ich hoffe, es wird Ihnen helfen
Danke, das hat mir ein bisschen geholfen. Aber ich muss 2 Felder auf Group By-Klausel in der 1. Tabelle und ziehen Sie ein anderes Element aus der 2. Tabelle, musste ich leicht ändern, um in LINQ in Ordnung zu laufen. – bhishan