2014-12-09 4 views
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-запросе?

ответ

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

ReportStatus логика не может быть 100% правильно, но это то, что я вывод из вашего SQL, если вы могли бы сформировать эту логику в словах это может мне полезно. – Vladimirs

+0

Логика заключается в том, что существует несколько записей с одним номером отчета. Если все записи имеют статус REPORTED, то строка должна указывать статус REPORTED. Если в списке на запись не сообщается, то групповая запись должна быть ОТПРАВЛЕНА. Я проверил ваше предложение. Это дает мне ошибку 'InnerException = {"ORA-00904: \" GroupBy1 \ ". \" K1 \ ": недопустимый идентификатор"}'. Есть предположения? – yrluc

+0

@yrluc похоже что-то похожее на http://stackoverflow.com/questions/24980245/ora-00904-invalid-identifier-for-an-identifier-in-a-group-by-clause (завтра снова посмотрит. .) – Vladimirs

Смежные вопросы