我試圖讓這個查詢到的LINQLINQ的LEFT JOIN不工作
SELECT [ID], [Name], LastSync, Phase
FROM [Store]
LEFT JOIN (
SELECT GLog.[StoreId] AS [StoreId], LastSync, Phase
FROM [GGCSyncLog] AS GLog
INNER JOIN (
SELECT MAX(G1.[DateTime]) AS LastSync, G1.[StoreId]
FROM [GGCSyncLog] AS G1
GROUP BY G1.[StoreId]
) AS G2 ON (GLog.[StoreId] = G2.[StoreId]) AND (GLog.[DateTime] = G2.[LastSync])
) AS MostRecentLog ON Store.[ID] = MostRecentLog.[StoreId]
其結果是
ID Name LastSync Phase
1 Sarasota 2010-07-31 5
2 Wellington 2010-07-31 8
3 Tampa International 2013-03-12 8
5 Events NULL NULL
6 PO Holding Store NULL NULL
我的LINQ返回正確的結果,除了我錯過了兩行與null LastSync &階段。任何想法有什麼不對?
from s in Stores
join gLog in
(from g1 in GGCSyncLogs.DefaultIfEmpty()
join g in
(from g in GGCSyncLogs
group g by g.StoreId into gM
select new {
StoreId = gM.Key, LastSync = gM.Max(gg=>gg.DateTime) })
on new {g1.StoreId, LastSync = g1.DateTime} equals new {g.StoreId, g.LastSync}
select new {g1.StoreId, g.LastSync, g1.Phase})
on s.ID equals gLog.StoreId
select new {s.ID, s.Name,
LastSync = (gLog != null ? (DateTime?)gLog.LastSync : null),
Phase = (gLog != null ? (int?)gLog.Phase : null) }
在LINQ'加入'和* inner join *相同。對於* left join *使用'join .. into'語法。 – 2013-03-15 16:49:09
明白了。這正是問題所在。 – strattonn 2013-03-15 18:55:45