1

ここで多くの質問と回答を確認しましたが、必要なものが見つからないようです。私は次のSQLを持っていますが、その下にはLINQステートメントに入るのに本当に問題があります。特定の問題は、フィールドの 1 つで、select と HAVING 句の両方で CASE ステートメントを使用していることです。これを行う必要があるさまざまな理由がありますが、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 値を集計する 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) };

ところで、これら 2 つのフィールドの名前付けに見られる小さな不一致は無視してください。おそらく、この質問のためにいくつかの名前をすぐに変更したためです。

4

1 に答える 1

0

これはあなたが望むもののようです:

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