在 LINQ 中实现 SQL 查询
Implement an SQL query in LINQ
我正在尝试在 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 不是 standard mapped function,唉,否则它可以用于将日期转换为月份级别的粒度
我正在尝试在 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 不是 standard mapped function,唉,否则它可以用于将日期转换为月份级别的粒度