SqlException при обновлении приложения linq2sql с SQL Server 2005 до 2008 - PullRequest
1 голос
/ 11 января 2012

Я обновляю веб-приложение с 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: datepart миллисекундаподдерживается функцией date dateadd для типа данных date. "

Страница: 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

1 Ответ

0 голосов
/ 11 января 2012

Я нашел один обходной путь:

(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, но это не помогло исходному запросу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...