Альтернатива EntityFunctions.TruncateTime при использовании EF CTP5 с Sql Server Compact Edition 4.0

Я использую код EF CTP5 в первую очередь с Sql CE 4.0. Я пытаюсь выполнить сравнение дат, не зависящее от времени, между двумя свойствами DateTime.

Поскольку linq to entites не может анализировать свойство DateTime.Date (что было бы неплохо), решение состоит в использовании EntityFunctions.TruncateTime, однако это не работает с Sql CE 4.0.

Я могу вручную сравнить Год, Месяц и День двух дат, это работает, но делает код намного более подробным, чем должен быть. В идеале я не хочу менять свои запросы, чтобы использовать длинную версию, чтобы заставить их работать как с полным сервером sql, так и с sql ce 4.0.

Поэтому у кого-нибудь есть какие-нибудь чистые и умные решения для этого? Я думаю, что решение, вероятно, будет включать переписывание выражений, но я не совсем уверен, с чего начать.

Любая помощь очень ценится,

Павел


person PabloBlamirez    schedule 21.02.2011    source источник


Ответы (1)


Есть ли у вас возможность изменить структуру вашей базы данных?

Если это так, вы можете добавить дополнительный столбец только с частью даты и времени, а затем использовать этот столбец в своем запросе.

Он займет немного больше места в вашей базе данных, но должен работать немного быстрее, так как вы избегаете каких-либо преобразований.

person Shiraz Bhaiji    schedule 28.02.2011
comment
Привет, это на самом деле то, что я сделал в то же время. Как вы говорите, это означает, что на уровне БД запросы на самом деле лучше. В данном случае это не слишком большой компромисс. Я не хочу иметь привычку не хранить свои сущности как чистые бизнес-объекты. Если я обнаружу, что мне нужно добавить другие «вспомогательные» столбцы для запросов, я думаю, что мне придется серьезно взглянуть на базу данных отчетов, предназначенную для уменьшения такого рода несоответствий. Спасибо за ответ я ценю это - person PabloBlamirez; 01.03.2011