LINQ查询合并多行

时间:2014-12-09 15:38:33

标签: c# linq entity

我正在尝试将有效的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查询中创建case语句?

1 个答案:

答案 0 :(得分:1)

你可以这样使用inline-if operator

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"
                    )
            };