在LINQ中实现一个SQL查询



我正在尝试在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();

但是我没有得到预期的结果。

(假设您正在使用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不是标准的映射函数,否则它可以用于将日期转换为月级粒度

最新更新