我正在将网络应用从SQL Server 2005升级到2008年。
对于像这样的查询:
(from e in context.Orders
group e by e.OrderDate.Value.Date.AddDays(-e.OrderDate.Value.Date.Day + 1) into g
orderby g.Count() descending
select new
{
Value = g.Count(),
Date = g.Key
}).FirstOrDefault().Dump();
我现在得到“SqlException:数据类型日期的日期函数dateadd不支持datepart毫秒。”
页面: http://social.msdn.microsoft.com/Forums/en-US/linqtosql/thread/6b00d5a4-8b43-402a-bcf7-b8516b6ffdf5/
...进一步描述了问题,但没有解决方案。
使用2005提供者linq2sql产生:
-- Region Parameters
DECLARE @p0 Int SET @p0 = 1
-- EndRegion
SELECT TOP (1) [t2].[value2] AS [Value], [t2].[value3] AS [Date]
FROM (
SELECT COUNT(*) AS [value], COUNT(*) AS [value2], [t1].[value] AS [value3]
FROM (
SELECT DATEADD(ms, (CONVERT(BigInt,(CONVERT(Float,(-DATEPART(Day, DATEADD(HOUR, -DATEPART(HOUR, [t0].[OrderDate]), DATEADD(MINUTE, -DATEPART(MINUTE, [t0].
[OrderDate]), DATEADD(SECOND, -DATEPART(SECOND, [t0].[OrderDate]), DATEADD(MILLISECOND, -DATEPART(MILLISECOND, [t0].[OrderDate]), [t0].[OrderDate])))))) + @p0)) *
86400000)) % 86400000, DATEADD(day, (CONVERT(BigInt,(CONVERT(Float,(-DATEPART(Day, DATEADD(HOUR, -DATEPART(HOUR, [t0].[OrderDate]), DATEADD(MINUTE, -DATEPART
(MINUTE, [t0].[OrderDate]), DATEADD(SECOND, -DATEPART(SECOND, [t0].[OrderDate]), DATEADD(MILLISECOND, -DATEPART(MILLISECOND, [t0].[OrderDate]), [t0].
[OrderDate])))))) + @p0)) * 86400000)) / 86400000, DATEADD(HOUR, -DATEPART(HOUR, [t0].[OrderDate]), DATEADD(MINUTE, -DATEPART(MINUTE, [t0].[OrderDate]), DATEADD
(SECOND, -DATEPART(SECOND, [t0].[OrderDate]), DATEADD(MILLISECOND, -DATEPART(MILLISECOND, [t0].[OrderDate]), [t0].[OrderDate])))))) AS [value]
FROM [Orders] AS [t0]
) AS [t1]
GROUP BY [t1].[value]
) AS [t2]
ORDER BY [t2].[value] DESC
2008年:
-- Region Parameters
DECLARE @p0 Int = 1
-- EndRegion
SELECT TOP (1) [t2].[value2] AS [Value], [t2].[value3] AS [Date]
FROM (
SELECT COUNT(*) AS [value], COUNT(*) AS [value2], [t1].[value] AS [value3]
FROM (
SELECT DATEADD(ms, (CONVERT(BigInt,(CONVERT(Float,(-DATEPART(Day, CONVERT(DATE, [t0].[OrderDate]))) + @p0)) * 86400000)) % 86400000, DATEADD(day, (CONVERT
(BigInt,(CONVERT(Float,(-DATEPART(Day, CONVERT(DATE, [t0].[OrderDate]))) + @p0)) * 86400000)) / 86400000, CONVERT(DATE, [t0].[OrderDate]))) AS [value]
FROM [Orders] AS [t0]
) AS [t1]
GROUP BY [t1].[value]
) AS [t2]
ORDER BY [t2].[value] DESC
答案 0 :(得分:0)
我找到了一个解决方法:
(from e in context.Orders
group e by new DateTime(e.OrderDate.Value.Year, e.OrderDate.Value.Month, 1) into g
orderby g.Count() descending
select new
{
Value = g.Count(),
Date = g.Key
}).FirstOrDefault();
但仍然有兴趣了解这个问题。
我试图将兼容性更改为Mysql Server 2008,但这对原始查询没有帮助。