【问题标题】:LINQ query to merge multiple rows用于合并多行的 LINQ 查询
【发布时间】:2014-12-09 15:38:32
【问题描述】:

我正在尝试将有效的 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 语句?

【问题讨论】:

    标签: c# linq entity


    【解决方案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"
                        )
                };
    

    【讨论】:

    • ReportStatus 逻辑可能不是 100% 正确,但这是我从您的 SQL 中推断出来的,如果您能用文字表达该逻辑,可能会对我有所帮助。
    • 逻辑是一个报表编号有多条记录。如果所有记录都具有 REPORTED 状态,则该行应指示状态 REPORTED。如果记录上的列表未报告,则组记录必须处于待处理状态。我检查了你的建议。它给了我一个错误'InnerException = {"ORA-00904: \"GroupBy1\".\"K1\": invalid identifier"}'。有什么想法吗?
    • @yrluc 看起来类似于stackoverflow.com/questions/24980245/…(明天再看看..)
    • 为了使用内联语句,我不得不将查询分成两个。获取数据的第一部分和第二组是进一步将其分组以根据需要设置状态。有没有办法组合两个 LINQ 查询?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-15
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多