‘Fecha’ no es compatible en LINQ to Entities. Solo se admiten inicializadores, miembros de entidades y propiedades de navegación de entidades

Estoy intentando ejecutar el siguiente código y estoy recibiendo un error

public List GetLoggingData(DateTime LogDate, string title) { var context = new LoggingEntities(); var query = from t in context.Logs where t.Title == title && t.Timestamp == LogDate select t; return query.ToList(); } 

El error que recibo es “No se admite el miembro de tipo especificado ‘Fecha’ en LINQ a entidades. Solo se admiten inicializadores, miembros de entidad y propiedades de navegación de entidad.” He intentado varios bashs de convertir cada cosa en una cadena, solo comparando la parte de fecha, pero parece que no puedo obtener la combinación correcta. Cualquier ayuda es muy apreciada.

Si está utilizando EF 6.0+, puede usar DbFunctions.TruncateTime(DateTime?) :

 var query = from t in context.Logs where t.Title == title && DbFunctions.TruncateTime(t.Timestamp) == LogDate.Date select t; 

Nota: Para versiones anteriores de EF donde DbFunctions no está disponible, EntityFunctions.TruncateTime(DateTime?) Se puede usar en su lugar.

No es la mejor solución, pero funciona. Por una variedad de razones, tengo que usar .net 3.5 en este punto y modificar la base de datos sería difícil. De todos modos, aquí hay una solución que funciona:

  var query = from t in context.Logs where t.Title == title && t.Timestamp.Day == LogDate.Day && t.Timestamp.Month == LogDate.Month && t.Timestamp.Year == LogDate.Year select t; 

No es la solución más elegante, pero es efectiva.

EntityFunctions.TruncateTime (t.Timestamp) está obsoleto de EF6.

Use debajo

DbFunctions.TruncateTime (t.Timestamp)

Utilice siempre EntityFunctions.TruncateTime () para x.DateTimeStart y LogDate. como :

 var query = from t in context.Logs where t.Title == title && EntityFunctions.TruncateTime(t.Timestamp) == EntityFunctions.TruncateTime(LogDate) select t; 

Corrígeme si estoy equivocado, pero en el ejemplo de mikemurf22, necesitaría verificar cada parte del componente de fecha, y potencialmente mucho más procesamiento de servidor.

De todos modos, me encontré con este problema, y ​​esta es mi solución.

Suponiendo que solo va a pasar el componente de fecha, puede encontrar el último minuto del día que ingresa y usar la cláusula where para definir el rango.

 public List GetLoggingData(DateTime LogDate, string title) { DateTime enddate = new DateTime(LogDate.Year, LogDate.Month, LogDate.Day, 23, 59, 59) var query = from t in context.Logs where t.Timestamp >= date where t.Timestamp <= enddate select t; return query.ToList(); } 

Convierta LongDate a .ToShortDateString y luego puede usarlo de esta manera:

 EntityFunctions.TruncateTime(t.Timestamp) == LogDate 

como Mike hizo

Prueba esto:

 var calDate = DateTime.Now.Date.AddDays(-90); var result = return (from r in xyz where DbFunctions.TruncateTime(r.savedDate) >= DbFunctions.TruncateTime(calDate) 

Puedes usar este truco:

 DateTime startDate = LogDate.Date; DateTime endDate = LogDate.Date.AddDays(1); var query = from t in context.Logs where t.Title == title && t.Timestamp >= startDate && t.Timestamp < endDate select t;