ここで多くの質問と回答を確認しましたが、必要なものが見つからないようです。私は次の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 つのフィールドの名前付けに見られる小さな不一致は無視してください。おそらく、この質問のためにいくつかの名前をすぐに変更したためです。