Con Linq to Entities, intento consultar una tabla de registro para buscar filas cerca de una fila coincidente. Tengo problemas para agregar una fecha dentro de la consulta. Esto es lo que tengo hasta ahora.Agregue una fecha en Linq a entidades
from
l in objectSet.Logs
let
match = objectSet.Logs.Where(whatever).FirstOrDefault()
where
l.Timestamp > (match.Timestamp - twoHours)
&& l.Timestamp < (match.Timestamp + twoHours)
select
l
Dejando de lado la condición de "lo que sea" que encuentra la fila que estoy interesado, "twoHours" ha sido variablemente un lapso de tiempo, una función .AddHours()
y así sucesivamente. No he encontrado la manera correcta de que EF pueda generar SQL que agregue el valor de un campo (coincidencia.Tiempo) a una constante.
La solución obvia es hacer primero la consulta de "coincidencia" y luego usar el valor literal en una segunda consulta, pero he simplificado el ejemplo de código aquí al problema principal (agregando fechas en la consulta) y en realidad mi consulta es más compleja y esto no sería ideal.
Saludos
he tenido un problema similar. El problema es que .AddHours() no tiene un equivalente SQL, y por lo tanto, Linq no puede convertir eso a una expresión SQL. He superado esto invocando la ejecución retrasada llamando a .ToList() y luego aplicando su filtro .AddHours() en una colección en memoria. – dotariel
@ XSaint32, eso está doblemente mal. There * is * [a (T) SQL equivalent,] (http://msdn.microsoft.com/en-us/library/ms186819.aspx) y usted * puede * llamarlo desde el EF. –
@Craig - Gracias por la entrada. No estaba enterado de eso. – dotariel