Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用于合并多行的LINQ查询_C#_Linq_Entity - Fatal编程技术网

C# 用于合并多行的LINQ查询

C# 用于合并多行的LINQ查询,c#,linq,entity,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 REPO

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

您可以这样使用:


ReportStatus逻辑可能不是100%正确,但这是我从您的SQL中推断出来的,如果您可以用文字形式表示该逻辑,它可能会对我有所帮助。逻辑是有多条记录具有一个报告编号。如果所有记录都已报告状态,则该行应指示已报告状态。若记录上的at列表未报告,则组记录必须挂起。我检查了你的建议。它给了我一个错误'InnerException={“ORA-00904:\“GroupBy1\”\“K1\”:无效标识符“}”。有什么想法吗?@yrluc似乎类似于(明天再看一下…)为了使用内联语句,我不得不将查询分为两部分。第一部分是获取数据,第二部分是进一步将其分组,以设置我需要的状态。有没有办法组合两个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,
               ReportStatus = 
                groupings.Select(x => x.STATE).Distinct().Count() > 1 ? 
                    "PENDING" : (
                        groupings.Max(g => g.STATE) == "REPORTED" ?
                            "REPORTED" : "PENDING"
                    )
            };