2013-02-11 1 views
1

Я рассмотрел много вопросов и ответов здесь, но, похоже, не нашел, что мне нужно. У меня есть следующий sql, ниже которого у меня возникают реальные проблемы с получением инструкции LINQ. Конкретная проблема заключается в том, что для одного из полей я использую оператор CASE, как в select, так и в имеет часть предложения HAVING. Различные причины, по которым мне нужно было это сделать, но я не могу воспроизвести его в LINQ.Как использовать предложение having в агрегате в сложной группе по запросу и присоединению в LINQ

Вот SQL:

select Count (DetailID) as MonthCount , StoreID, DetailID, SUM(Amount) as AnnualAmount, PAYear, MIN(CASE when ExportFlag = 'SUCCESS' then 1 when ExportFlag is NULL or ExportFlag = '' then 0 else - 1 end) as ExpFlag 
from Input_Financials 
inner join DestinationDetail cdd on cdd .ID = Financials.DetailID 
group by StoreID, DetailID, PAYear 
Having MIN (CASE when ExportFlag = 'SUCCESS' then 1 when ExportFlag is NULL then 0 else -1 end) = 0 
and Count (*) >= 1 
order by PAYear 

Это была моя лучшая попытка LINQ Постулаты, но вы заметите, что я не имею эквивалентную от имеющего положение, которое агрегирует значение ExportFlag (что очень важно)

var query = 
       from inf in inputActs 
       join cgrdets in cgrDetails on inf.DestinationDetailID equals cgrdets.ID 
       let export = (inf.ExportFlag == "SUCCESS" ? 2: 
          inf.ExportFlag == "ERROR" ? 1: 
          inf.ExportFlag == null ? 0: 99) 
       group inf by new {export, inf.StoreID, inf.DestinationDetailID,inf.PAYr } into g 
       where g.Key.export == 0 
       select new { MonthCount = g.Count(), g.Key.StoreID, g.Key.PAYr, Amount = g.Sum(inf=>inf.Amount) }; 

Кстати, пожалуйста, проигнорируйте некоторые незначительные несоответствия, которые вы можете найти в названии полей между этими двумя - это просто потому, что я быстро переименовал их ради этого вопроса.

+0

'HAVING' в SQL будет просто' Where', что вы звоните после 'GroupBy' в LINQ ... – Servy

ответ

0

Похоже, это то, что вы хотите:

where g.All(item => item.ExportFlag == "SUCCESS" || item.ExportFlag == null) 

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

  • Нет связанных вопросов^_^