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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.