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) };
順便說一句 - 請忽略一些小的差異,您可以在這兩個領域之間的命名發現 - 它只是可能是因爲我很快就改名爲一些這個問題的緣故。
一個'HAVING'在SQL也只是一個'Where'你的'GroupBy'在LINQ後打電話... – Servy 2013-02-11 19:32:48