Итак, я пытался преобразовать свой код L2S в EF 4.1, главным образом потому, что L2S стало раздражающе трудным для обновления схемы. К сожалению, похоже, что возможности linq в EF крайне отсутствуют, и я не уверен, как написать этот запрос в EF, так как кажется, что вы не можете делать арифметику дат в EF. Мой код Linq-To-Sql:
// Check for any scheduled requests that have not started within the last 24 hours since the scheduled time on the previous day
DateTime currentDate = DateTime.Now.Date;
req = _context.TestRequests.Where(x => x.scheduled_time != null
&& x.TestRequestRuns.Count > 0
// Make sure the current time is after the request's scheduled time
&& DateTime.Now > (currentDate + x.scheduled_time.Value)
// Check to see if the scheduled time today is later than the last test run start time, if so start a test run
&& (currentDate + x.scheduled_time.Value) >
x.TestRequestRuns.Where(y => !y.reran)
.OrderByDescending(y => y.start_dt)
.First().start_dt)
.OrderBy(x => x.scheduled_time)
.FirstOrDefault();
Система предназначена для ежедневного запуска автоматических тестов в запланированное время. Основная идея этого запроса заключается в том, что я получаю тестовые запросы, которые были выполнены хотя бы один раз, с запланированным временем до этого момента, и тестовые запросы, которые не выполнялись с последнего запланированного времени.
Этот запрос прекрасно работает с _context
, подключенным к контексту данных L2S, но при использовании его против моего EF 4.1 DbContext
я получаю ArgumentException
с сообщением DbArithmeticExpression arguments must have a numeric common type.
.
Кто-нибудь знает, почему это не работает и как я могу это исправить для EF 4.1?
Редактировать
Если говорить точнее, EF кажется неспособным выполнить арифметику дат, и (currentDate + x.scheduled_time.Value)
является причиной исключения.