Как исправить «LINQ to Entities не распознает метод« System.DateTime GetValueOrDefault () »»?

У меня есть этот код. В основном мне нужно изменить дату и сообщить пользователю, что сегодня магазин будет открыт с 10 до 22 часов. Так что время здесь установлено.

от:-

today_date = "2020-03-23T00: 00: 00"

start_hour_time = "1900-01-01T10: 00: 00"

end_hour_time = "1900-01-01T22: 00: 00"

изменить на: -

start_newdatetime = "2020-03-23T10: 00: 00"

end_newdatetime = "2020-03-23T22: 00: 00"

DateTime todaysdate = DateTime.Now.Date;       

var find_date = bdb.tbl_store
        .Join(bdb.tbl_hour, a => a.start_hour_id, b => b.hour_id, (a, b) => new { a, b })
        .Join(bdb.tbl_hour, a => a.a.end_hour_id, b => b.hour_id, (a, b) => new { a, b })
        .Where(x => x.a.a.store_id == store_id )
        .Select(x => new {

        x.a.a.store_id,
        start_hour_time = x.a.b.hour_time,
        end_hour_time = x.b.hour_time,
        start_newdatetime = todaysdate.Date+ x.a.b.hour_time.GetValueOrDefault().TimeOfDay,
        end_newdatetime = todaysdate.Date + x.b.hour_time.GetValueOrDefault().TimeOfDay

    }) .ToList();

проблема сейчас, это ошибка. Потому что я хочу, чтобы это было на том же вар.

«Сообщение»: «Произошла ошибка.», «ExceptionMessage»: «LINQ to Entities не распознает метод System.DateTime
GetValueOrDefault () ', и этот метод невозможно преобразовать в выражение хранилища. "," ExceptionType ":" System.NotSupportedException ",

но это будет хорошо, если я создам другую переменную, чтобы вернуть новое значение.

Всего 1 ответ


Ваше выражение, похоже, не работает, поскольку члены GetValueOrDefault и TimeOfDay недоступны для трансляции запросов EF DB, поэтому вам как-то придется как-то обойти эту проблему. На данный момент я не могу проверить, но я думаю, что возможно следующее

var find_date = bdb.tbl_store
        .Join(bdb.tbl_hour, a => a.start_hour_id, b => b.hour_id, (a, b) => new { a, b })
        .Join(bdb.tbl_hour, a => a.a.end_hour_id, b => b.hour_id, (a, b) => new { a, b })
        .Where(x => x.a.a.store_id == store_id )
        .ToList()
        .Select(x => new {
            x.a.a.store_id,
            start_hour_time = x.a.b.hour_time,
            end_hour_time = x.b.hour_time,
            start_newdatetime = todaysdate.Date + x.a.b.hour_time.GetValueOrDefault().TimeOfDay,
            end_newdatetime = todaysdate.Date + x.b.hour_time.GetValueOrDefault().TimeOfDay
    }).ToList();

Таким образом, ваш запрос запускается при вызове ToList а все остальное (лямбда-выражение, переданное в Select ) выполняется на клиенте как простой C #, поэтому Entity не имеет оснований жаловаться. Правда, я точно не знаю, полностью ли разрешены эти объекты при вызове ToList . Если это не так, вы могли бы сделать что-то вроде этого

var find_date = bdb.tbl_store
        .Join(bdb.tbl_hour, a => a.start_hour_id, b => b.hour_id, (a, b) => new { a, b })
        .Join(bdb.tbl_hour, a => a.a.end_hour_id, b => b.hour_id, (a, b) => new { a, b })
        .Where(x => x.a.a.store_id == store_id)
        .Select(x => new {
            x.a.a.store_id,
            start_hour_time = x.a.b.hour_time,
            end_hour_time = x.b.hour_time 
        })
        .ToList()
        .Select(x => new {
            store_id,
            start_hour_time,
            end_hour_time,
            start_newdatetime = todaysdate.Date + start_hour_time.GetValueOrDefault().TimeOfDay,
            end_newdatetime = todaysdate.Date + end_hour_time.GetValueOrDefault().TimeOfDay
        }).ToList();

Есть идеи?

10000