Как я могу заставить этот запрос Linq-To-Sql работать в Entity Framework 4.1? - PullRequest
0 голосов
/ 21 июня 2011

Итак, я пытался преобразовать свой код 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) является причиной исключения.

Ответы [ 2 ]

2 голосов
/ 21 июня 2011

Не зная тип данных поля scheduled_time, я подозреваю, что ошибочные строки - это две строки, в которых вы пытаетесь вычислить:

currentDate + x.scheduled_time.Value

Я мог бы представить, что вы пытаетесь добавить *От 1005 * до DateTime объекта, что дает своего рода несоответствие типов в EF4.1.Почему бы вам не позвонить .Add () на currentDate и посмотреть, работает ли это немного лучше:

currentDate.Add(x.scheduled_time.Value)
1 голос
/ 21 июня 2011

Checkout, http://msdn.microsoft.com/en-us/library/system.data.objects.sqlclient.sqlfunctions.aspx. Они могут помочь вам при попытке выполнить функции Date в EF. Я использую материал DatePart много.

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