query framework columns all c# entity-framework linq linq-to-entities

c# - framework - ''Fecha'' no es compatible en LINQ to Entities. Solo se admiten inicializadores, miembros de entidades y propiedades de navegación de entidades



select all entity framework c# (8)

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

public List<Log> 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 intentos 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.


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

EntityFunctions.TruncateTime(t.Timestamp) == LogDate

como Mike hizo


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<Log> 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(); }


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.


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;



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;