Entity Framework - DateTime в предложении where - PullRequest
1 голос
/ 18 января 2010

Я пытаюсь преобразовать этот код из хранимой процедуры в запрос «LINQ to Entities»:

select * from myTable
where venue_date + start_time <= @EndDate
and dateadd(minute, duration * 24 * 60, venue_date + start_time) >= @StartDate

Как видите, есть некоторые манипуляции с датами. Подобные вещи не будут работать, потому что такие функции, как .AddHours() не поддерживаются:

where b.Venue_Date.Value.AddHours(b.Start_Time.Value.Hour) <= request.EndDate

Нечто подобное тоже не сработает. Ошибка говорит о том, что не поддерживаются конструкторы с параметрами:

where new DateTime(b.Venue_Date.Value.Year, b.Venue_Date.Value.Month,
  b.Venue_Date.Value.Day, b.Start_Time.Value.Hour, b.Start_Time.Value.Minute,
  b.Start_Time.Value.Second) <= request.EndDate

Кажется, что Entity Framework ОЧЕНЬ ограничивает работу с датами. Я думаю, мне придется использовать процедуру. Следующая проблема состоит в том, чтобы выяснить, как создать процедуру, которая может заполнять несколько связанных объектов.

1 Ответ

0 голосов
/ 18 января 2010

Является ли изменение схемы одним из вариантов? Мой опыт показывает, что при хранении отдельных столбцов, таких как:

  • Дата
  • Время начала (как дата)
  • Время остановки (как дата)

... отдельно, это огромное преимущество - хранить дату в избыточном виде в столбцах Date и StartTime Не в последнюю очередь потому, что это облегчает написание вашего запроса (1), и (2) запрос теперь может использовать индекс.

Я сделал это обоими способами, и я очень предпочитаю этот метод.

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