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;
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.
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;
EntityFunctions.TruncateTime(t.Timestamp) está obsoleto de EF6.
Use debajo