ソリューション1は
私はLinqToSQLを使用してLinqPadでこれをテストした
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();
とそれはこのSQLを生成しました(ほとんどあなたのSQLのように、テーブルの順序だけが切り替えられます)
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]
対処方法2
これであなたが望むのと同じ結果を生成しますが
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();
、それが発生したことにより、参加/グループなしの相関サブクエリを強制するための一つの方法この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]
私はあなたに役立つことを願っています
ありがとう、これは私を少し助けました。しかし、私は最初のテーブルのGroup By節に2つのフィールドを入れ、2番目のテーブルから別のアイテムを引き出す必要がありました.LINQで正常に動作するように少し修正しなければなりませんでした。 – bhishan