簡體   English   中英

使用 LINQ/Lambda 的帶有 SELECT、MAX 語句的 WHERE 條件

[英]WHERE condition with SELECT, MAX statement using LINQ/Lambda

我正在嘗試將以下 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 的新手

提前致謝。

試試這個:

var query = 
    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 mv.ReportingDate == 
        (from mv2 in MeasureValues
        where mv2.MeasureID == mv.MeasureID
        orderby mv2.ReportingDate descending
        select mv2.ReportingDate
        ).FirstOrDefault()
    select new { m.InternalID, p.Code };

var distinct = 
    from q in query
    group q by new { q.InternalID, q.Code} into gr
    select new 
    { 
        InternalID = gr.First().InternalID, 
        Code = gr.First().Code 
    };

var result = distinct.ToList();

查找 max ReportingDate另一種選擇:

var query = 
    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 mv.ReportingDate == MeasureValues.Where(x => x.MeasureID == mv.MeasureID).Select(x => x.ReportingDate).Max()
    select new { m.InternalID, p.Code };

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM