C# 用于合并多行的LINQ查询
我正在尝试将一个有效的SQL查询转换为等效的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
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"
)
};