Linq, Bug в запросах с datetime
От: Аноним  
Дата: 29.09.11 06:50
Оценка:
БД SqlCE4.
Есть таблица Task с ПК:
VehicleID int
DriverID int
TaskTime datetime и т.д.

При запросе вида

if (db.Task().Any(m =>
                        m.VehicleID == vehItem.ID &&
                        m.DriverID == driver.ID &&
                        m.StartTime == item.ВремяНачала))...


Выдает ошибку:
{"Недопустимый тип данных для булевой операции. [ Data type (if known) = datetime,Data type (if known) = nvarchar ]"}

Смотю запрос, сгенерированый BlToolkit:

SELECT
     CASE WHEN EXISTS(
          SELECT
               *
          FROM
               [Task] [m]
          WHERE
               [m].[VehicleID] = 1123 AND [m].[DriverID] = 7 AND [m].[StartTime] = '2011-08-18 00:00:00.0000000'
     ) THEN 1 ELSE 0 END as [c1]


Метод тыка + гугль — выясняю:
1. Формат строки вида '2011-08-18 00:00:00.0000000' SQL CE не воспринимает — слишком много нулей в милисекундах
2. На MSDN часто пишут рекомендации "не использовать строки при сравнении объектов datetime", т.к. множество подобных ошибок в формате строки — региональные настройки и пр.

Возможно переписать парсер для MSSQL/SQLCE для корректной подстановки не строки, а объекта DateTime в запрос? Ну или, хотя бы исправить эту ошибку...
linq bug
Re: Linq, Bug в запросах с datetime
От: Аноним  
Дата: 29.09.11 07:06
Оценка:
Та же самая ошибка при попытке вставки записи (на конвертации datetime)...
Re: Linq, Bug в запросах с datetime
От: IT Россия linq2db.com
Дата: 29.09.11 14:31
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Возможно переписать парсер для MSSQL/SQLCE для корректной подстановки не строки, а объекта DateTime в запрос? Ну или, хотя бы исправить эту ошибку...


Будем лечить. Вообще-то странно, по идее должен параметр использоваться
Если нам не помогут, то мы тоже никого не пощадим.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.