2013-02-11 48 views
1

我已經在這裏查看了很多問題和答案,但似乎找不到我需要的東西。 我有下面的SQL下面,我有進入一個LINQ語句真正的麻煩。 具體問題是,對於其中一個字段,我在select和 中都使用CASE語句包含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 statment但你會發現,我沒有它彙集了ExportFlag值having子句相當於 (這很重要)

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 2013-02-11 19:32:48

回答

0

它看起來這是你想要什麼:

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