用于合并多行的 LINQ 查询

本文关键字:LINQ 查询 合并 用于 | 更新日期: 2023-09-27 18:33:52

我正在尝试将有效的SQL查询转换为LINQ等效项。这是查询。

SELECT REPORT_NUMBER, 
case when count(distinct STATE) > 1 then 'PENDING' 
    else case when  max(STATE) = 'REPORTED' then 'REPORTED' 
else 'PENDING' end end status, 
max(REPORT_YEAR) 
FROM SAMPLE 
GROUP BY REPORT_NUMBER 
ORDER BY max(REPORT_YEAR) DESC

到目前为止,我创建了需要帮助的 LINQ 查询。

var sums = from foo in db.SAMPLEs
           group foo by foo.REPORT_NUMBER into groupings
           orderby groupings.Key ascending
           select new ReportListModel
           {
               ReportNbr = groupings.Key,
               ReportYear = groupings.Max(g => g.REPORT_YEAR),
               ReportSt = groupings.Max(g => g.STATE)
            };

使用groupings.Max(g => g.STATE)为我提供了正确的记录数量,但显然给了我不正确的字段结果。

如何在SQL查询中创建案例语句?

用于合并多行的 LINQ 查询

您可以使用内联 if 运算符,如下所示:

var sums = from foo in db.SAMPLEs
           group foo by foo.REPORT_NUMBER into groupings
           orderby groupings.Key ascending
           select new ReportListModel
           {
               ReportNbr = groupings.Key,
               ReportStatus = 
                groupings.Select(x => x.STATE).Distinct().Count() > 1 ? 
                    "PENDING" : (
                        groupings.Max(g => g.STATE) == "REPORTED" ?
                            "REPORTED" : "PENDING"
                    )
            };