1

我在这里查看了很多问题和答案,但似乎找不到我需要的东西。我有以下 sql,我在进入 LINQ 语句时遇到了真正的麻烦。具体问题是,对于其中一个字段,我在 select 中都使用了 CASE 语句,并且具有 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) };

顺便说一句 - 请忽略您在这两者之间的字段命名时可能会发现的一些细微差异 - 这可能是因为我为了这个问题而快速重命名了一些。

4

1 回答 1

0

看起来这就是你想要的:

where g.All(item => item.ExportFlag == "SUCCESS" || item.ExportFlag == null)
于 2013-02-11T19:36:49.763 回答