この次の SQL クエリ (別のテーブルとの CTE LEFT JOINED) をラムダまたはクエリ式として記述するにはどうすればよいですか?
WITH Hours as
(
SELECT 0 As Hour
UNION ALL
SELECT Hour + 1
FROM Hours
WHERE Hour + 1 < 24
)
SELECT Hours.Hour, COALESCE(Revenue, 0) FROM Hours
LEFT JOIN
(
SELECT DATEPART(hh, TableDate) As Hour, SUM(Revenue) Revenue FROM MyTable
GROUP BY DATEPART(hh, TableDate)
) c
ON
c.Hour = Hours.Hour
GroupJoin と SelectMany を使用して LEFT JOIN を実行できることはわかっていますが、クエリの CTE 部分の表現をどこから始めればよいかわかりません。ラムダまたはクエリ式でこれを行うには、静的テーブルを作成する必要がありますか?
- 編集 -
だから私は最終的にこれになりました(読みやすさのためにラムダよりもクエリ式を好みました):
var revenue = (
from range in Enumerable.Range(0, 23)
join conv in db.MyTable on range equals conv.TableDate.Hour into c
from d in c.DefaultIfEmpty()
group d by range into g
select new { Hour = g.Key, Revenue = g.Sum(e => e == null ? 0.0 : e.Revenue), }
)