БД 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 в запрос? Ну или, хотя бы исправить эту ошибку...