次の SQL スニペットがあります。
WHERE YEAR(wo.audt_created_dttm) >= 2011 - 3 --narrows down to a year
AND YEAR(wo.audt_created_dttm) >= 2006 -- bad data less than 2006
AND wo.audt_created_dttm < DATEADD(mm, 1, CAST(CAST(1 * 3 as varchar) + '/01/' + CAST(2011 as varchar) as DateTime))
これを LINQ to SQL (LINQPad でのテスト目的) に変換すると、次のようになります。
int year = 2012, quarter = 1;
DateTime timeframe = new DateTime(year, (quarter * 3), 01).AddMonths(1);
where wo.Audt_created_dttm.Value.Year >= year - 3 && wo.Audt_created_dttm.Value.Year >= 2006
&& wo.Audt_created_dttm < timeframe && (s.Id =="NM" || s.Id == "TH") &&
(wo.Clsdt_date ?? new DateTime(3000, 01, 01)) < DateTime.Now
ただし、実際のソリューションでは、年または四半期を具体的に定義したくありません。年と四半期を最新にしたい。
1年間、私はこれをやろうとしました:
DateTime timeframe = new DateTime(timeframe.Year, (quarter * 3), 01).AddMonths(1);
しかし、コンパイラはそれをまったく好みません。それから私はこれを試しました:
DateTime setYear = new DateTime();
DateTime timeframe = new DateTime(setYear.Year, (quarter * 3), 01).AddMonths(1)
それもうまくいきませんでした。年間または四半期のどちらを行うかについて迷っています。アドバイスをいただければ幸いです。