2
Я пытаюсь преобразовать SQL-запрос, который работает, в эквивалент LINQ. Вот запрос.Запрос 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)
дает мне правильное количество записей, но, очевидно, дает мне неправильный результат поля.
Как я могу создать оператор case, как в SQL-запросе?
ReportStatus логика не может быть 100% правильно, но это то, что я вывод из вашего SQL, если вы могли бы сформировать эту логику в словах это может мне полезно. – Vladimirs
Логика заключается в том, что существует несколько записей с одним номером отчета. Если все записи имеют статус REPORTED, то строка должна указывать статус REPORTED. Если в списке на запись не сообщается, то групповая запись должна быть ОТПРАВЛЕНА. Я проверил ваше предложение. Это дает мне ошибку 'InnerException = {"ORA-00904: \" GroupBy1 \ ". \" K1 \ ": недопустимый идентификатор"}'. Есть предположения? – yrluc
@yrluc похоже что-то похожее на http://stackoverflow.com/questions/24980245/ora-00904-invalid-identifier-for-an-identifier-in-a-group-by-clause (завтра снова посмотрит. .) – Vladimirs