我正在嘗試在 LINQ 中實作以下查詢,但找不到解決方案:
SQL:
SELECT COUNT(*) AS AmountMonths
FROM (SELECT SUBSTRING(CONVERT(NVARCHAR(12), pay_date, 112), 1, 6) AS Month
FROM #tmp
GROUP BY SUBSTRING(CONVERT(NVARCHAR(12), pay_date, 112), 1, 6)) AS AmountMonths
我需要的是獲得客戶付款的月份數,條件是可能有幾個月沒有付款。
在 C# 中,我嘗試了以下操作:
int amountMonths = payDetail.GroupBy(x => Convert.ToDateTime(x.PayDate)).Count();
和
int amountMonths = payDetail.GroupBy(x => Convert.ToDateTime(x.PayDate).Month).Count();
但我沒有得到預期的結果。
uj5u.com熱心網友回復:
(假設您使用的是 EF Core)
您快到了。你可以這樣做:
var amountMonths = context.AmountMonths.GroupBy(c => new { c.PayDate.Year, c.PayDate.Month }).Count();
這將轉化為:
SELECT COUNT(*)
FROM (
SELECT DATEPART(year, [a].[PayDate]) AS [a]
FROM [AmountMonths] AS [a]
GROUP BY DATEPART(year, [a].[PayDate]), DATEPART(month, [a].[Pay_Date])
) AS [t]
我發現這比創建一個字串并將其切碎更可取。EOMONTH 不是標準的映射函式,唉,否則它可用于將日期轉換為月份級別的粒度
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/476609.html
