記事詳細
- 投稿日
- 2026年09月20日01時11分
-
タイトル
-
ASP.NET Core MVC: Paymentテーブルのposte列の月番号をDistinctする(重複排除)query です:「 var today = DateTime.Today var dstnctPost = _context.Payments .Where(p => p.Posted.Year == today.Year) .Select(p => p.Posted.Month) .Distinct() .OrderBy(m => m) .ToList(); 」 このqueryでtoday.Monthが1または2の場合は前年の12も含めるquery文を教えてください。
- 内容
-
なるほど、
今のクエリは「今年のPosted.Monthを重複排除して昇順取得」ですが、
1月または2月の場合は前年の12月も含めたいという条件ですね。これは Where 条件 を少し工夫すれば実現できます。
修正版クエリ(C# / LINQ to Entities)
ポイント
- 条件分岐を Where 内に直接書く
today.Monthが 1 または 2 の場合だけ前年12月を追加。
- Distinct → OrderBy の順序はそのまま。
- LINQ to Entities なので、
DateTimeのプロパティ (Year,Month) はそのまま使えます。
例
- today = 2026-01-15
→ 2026年の全月 + 2025年12月が対象 - today = 2026-03-01
→ 2026年の全月のみ(前年12月は含まれない)
もし「前年12月だけでなく、前年11月や10月も含めたい」などの拡張も簡単にできます。
その場合はp.Posted.Month >= 10のように条件を変えるだけです。このクエリは SQL に変換されても効率的 で、
不要なデータをメモリに持ってこない形になっています。必要なら、このクエリを 月番号だけでなく "年+月" のペアで重複排除 する形にもできますが、
今の要件だとこのままで十分です。もし希望があれば、「年+月のペアをDistinctして昇順」 のバージョンも作れますが、
作りますか?
そうすると前年12月と今年の1月・2月の並びが自然になります。Powered by Froala Editor
- 条件分岐を Where 内に直接書く
-
添付画像
-
画像はありません
- Genreのカテゴリ-名
- Controllers