Al usar este código en Entity Framework , recibo el siguiente error. Necesito obtener todas las filas para una fecha específica, DateTimeStart
es de tipo DataType en este formato2013-01-30 12:00:00.000
Código:
var eventsCustom = eventCustomRepository.FindAllEventsCustomByUniqueStudentReference(userDevice.UniqueStudentReference)
.Where(x => x.DateTimeStart.Date == currentDateTime.Date);
Error:
base {System.SystemException} = {"El miembro de tipo especificado 'Fecha' no es compatible en LINQ to Entities. Solo se admiten inicializadores, miembros de entidad y propiedades de navegación de entidad."}
¿Alguna idea para solucionarlo?
Respuestas:
DateTime.Date
no se puede convertir a SQL. Utilice el método EntityFunctions.TruncateTime para obtener la parte de la fecha.ACTUALIZACIÓN: Como @shankbond mencionó en los comentarios, en Entity Framework 6
EntityFunctions
está obsoleto, y debe usar laDbFunctions
clase, que se envía con Entity Framework.fuente
Ahora deberías usar
DbFunctions.TruncateTime
fuente
Me gustaría agregar una solución que me haya ayudado a resolver este problema en el marco de la entidad:
Espero que ayude.
fuente
EntityFunctions
es obsoleto. Considere usar en suDbFunctions
lugar.fuente
Utilice siempre EntityFunctions.TruncateTime () para x.DateTimeStart y currentDate. como :
fuente
Solo usa propiedades simples.
Si las fechas futuras no son posibles en su aplicación, entonces > = x.DateTimeStart> = currentDateTime.Date es suficiente.
si tiene comparaciones de fechas más complejas, verifique las funciones canónicas y si tiene funciones EF6 + DB
Más en general: para las personas que buscan problemas Los métodos de Linq admitidos en EF pueden explicar problemas similares con sentencias de linq que funcionan en Listas de base de memoria pero no en EF.
fuente
Simplificado:
fuente
Use el siguiente código para usar EF6:
fuente
Otra solución podría ser:
fuente