【发布时间】:2019-07-16 17:07:42
【问题描述】:
我正在尝试将 SQL 查询转换为 C# 等效的 LINQ/Lambda,如下所示
SELECT mv.MeasureID, mv.ProviderID, MAX(mv.ReportingDate) AS mostRecentReportingDate
FROM (((TransactionDetail AS td
INNER JOIN #provider AS p ON td.TrustCode = p.Code)
INNER JOIN #measure AS m ON td.MetricCode = m.InternalID)
INNER JOIN #measureValue AS mv ON m.ID = mv.MeasureID AND p.ID = mv.ProviderID)
WHERE td.BatchID = @batchID AND
td.RowAction = 'A' AND
(m.Type = 7 OR m.Type = 8) AND
td.Value <> mv.Value
GROUP BY mv.MeasureID, mv.ProviderID
我卡在这条线上
INNER JOIN #measureValue AS mv ON m.ID = mv.MeasureID AND p.ID = mv.ProviderID)
以下是我目前尝试过的
var total = (from TD in ingestionHubContext.TransactionDetail
join P in provider on TD.TrustCode equals P.Code
join M in measure on TD.MetricCode equals M.InternalId
join MV in measureValue on M.Id equals MV.MeasureId //and logic to be fixed
where TD.BatchId == batchId && TD.RowAction == "A"
&& (M.Type == 7 || M.Type == 8) && TD.Value != MV.Value
group TD by new { MV.MeasureId, MV.ProviderId } into Total
select Total);
您能否建议我如何以更好的方式编写此内容?并在我的代码的第 4 行处理带有 AND 条件的 JOIN。
我在下面尝试了它不起作用,因为它们需要匹配(错误在 P.Id)
join MV in measureValue
on new { M.id, P.Id } equals new { MV.MeasureId, MV.ProviderId }
我还需要帮助来完成MAX(mv.ReportingDate)
非常感谢任何帮助。提前致谢。
【问题讨论】: