【发布时间】:2019-02-26 13:39:54
【问题描述】:
我正在尝试将以下 SQL 查询转换为 C# 中的 LINQ/Lambda
SELECT DISTINCT M.InternalID, P.Code
FROM (
dbo.MeasureValue MV
INNER JOIN dbo.Measure M ON MV.MeasureID = M.ID
INNER JOIN dbo.Provider P ON MV.ProviderID = P.ID
)
WHERE MV.ReportingDate = (
SELECT MAX(ReportingDate)
FROM (
SELECT ReportingDate
FROM dbo.MeasureValue
WHERE MeasureID = MV.MeasureID
) MaxReportingDate
);
到目前为止,
(from MV in MeasureValues
join M in Measures on MV.MeasureID equals M.ID
join P in Providers on MV.ProviderID equals P.ID
Where //???
select new //Distinct??
{ M.InternalID, P.Code} )
有人可以指导我如何在 SQL 查询中使用嵌套的 WHERE 条件,并在整体上执行嵌套 SELECT 和 DISTINCT 的 MAX 吗?
作为一个整体,LINQ/Lamda 应该输出与 SQL 查询相同的结果。
*我是 SQL 和 LINQ 的新手
提前致谢。
【问题讨论】:
-
也许通过
ReportingDatedesc 订购并选择First(或FirstOrDefault)? (除非几行可能有相同的日期) -
我将按该子选择进行分组,获取带有 MeasureId 和 MaxReportingDate 的两列。然后,您可以将该数据与您的主查询连接起来。顺便说一句,这也是您可以/应该对 SQL 查询进行的操作(更好的性能)
-
可以使用Linqer将SQL查询转换为Linq
-
@FortyTwo 该产品只有试用版,不能免费使用。
-
你应该尝试转换的 SQL 是这个:
select MV.* from (select MeasureID, Max(ReportingDate) MaxReportingDate from MeasureValue group by MeasureID) maxValues inner join MeasureValue mv on maxValues.MeasureID = mv.MeasureID and mv.ReportingDate = maxValues.maxReportingDate
标签: c# sql-server linq lambda