2011-12-28 14 views
9

Necesito comprobar si dos fechas son iguales en la consulta Linq y las fechas provienen de dos tablas diferentes (no como un parámetro) He analizado las soluciones existentes en la web y también en SO. algunos no son aplicables en mi caso y algunos no son elegantes. simplemente buscando una mejor solución alternativa si hay alguna.Solución elegante para verificar si dos fechas son iguales, en Linq (donde la segunda fecha NO es un parámetro)

consulta de ejemplo (que comparar sólo porciones fecha):

var query = from t1 in Table1 
      join t2 in Table2 on t1.Id equals t2.ForeignKeyId 
      where t1.Id = someId 
       && t1.Date1.Date.Equals(t2.Date2.Date) 

éste falla con un error " 'Date' no es compatible con LINQ a Entitiies Sólo inicializadores, miembros de la entidad, y las propiedades de navegación entidad. son compatibles "

la publicación 'Date' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported tiene una solución que compara día, mes y año por separado. Traté de envolverlo en un método de extensión, pero parece que a Linq tampoco le gustan los métodos de extensión. dado que la segunda fecha no es una variable, no puedo usar la otra solución mencionada en la publicación vinculada (y no puedo llamar al método "AddDays" en una fecha dentro de Linq por algún motivo). Parece que hay muchas limitaciones con la API de fecha en Linq.

+0

¿Se comparan día, el mes y el año de trabajo por separado como se esperaba? – dasblinkenlight

+0

sí, funciona si los comparo por separado. – RKP

Respuesta

16

Intente utilizar DiffDays desde la clase EntityFunctions. Personalmente nunca utilizado esto, pero vale la pena probar la siguiente manera:

var query = from t1 in Table1 
     join t2 in Table2 on t1.Id equals t2.ForeignKeyId 
     where t1.Id = someId 
      && EntityFunctions.DiffDays(t1.Date1, t2.Date2) == 0 
+1

Muchas gracias. eso funciona como un encanto. Miré el SQL generado y la comparación de fecha se convierte en DATEDIFF (día, t1.Date1, t2.Date2) = 0, que es correcto. No sabía sobre este "EntityFunctions" antes. Gracias una vez más. – RKP

+0

Bienvenido, me alegro de que haya ayudado :) – Reniuz

+0

olvidé mencionar que utilicé una versión ligeramente modificada de su código. No puedo usar la propiedad "Fecha" de "Fecha y hora" como se menciona en mi publicación, así que utilicé "EntityFunctions.DiffDays (t1.Date1, t2.Date2) == 0" y funcionó. – RKP

0

Por lo que recuerdo, puede comparar las fechas usando el == operator.

+0

'==' compara las partes de fecha y hora; el OP solo quiere que se compare la fecha. – dasblinkenlight

Cuestiones relacionadas