
Una de las consultas casi obligadas a ofrecer cualquier filtro de nuestra aplicación es permitir el filtrado de fechas. Esta tarea a priori tan sencilla, conlleva una cierta dificultad en Entity Framework, ya que generalmente lo único que queremos comparar es la fecha, sin tener en cuenta la hora.
Por ejemplo, si queremos encontrar en base de datos el registro creado el “07/04/2014″, y realizamos la consulta tal cual una igualdad:
[code language=”csharp”]
DateTime FechaBuscada = Convert.ToDateTime("07/04/2014");
db.Blogs.Where(i => i.FechaCreacion == FechaBuscada);
[/code]
Esto nos encuentra ’0′ resultados, ya que de esta forma nos esta comparando dos DateTime con la hora.
- FechaBuscada = ’2014-04-07 00:00:00.000′
- FechaCreacion (El registro en base de datos) = ’2014-04-07 10:14:39.463′
Como no coincide fecha y hora, Entity Framework interpreta que no existe igualdad, y por tanto nos devuelve ’0′ resultados.
Por tanto la solución pasa por realizar la comparación solo con la parte fecha del DateTime. Esto se consigue utilizando las extensiones que Entity framework nos ofrece en:
EntityFunctions: Versiones Entity Framework 5.0 y anteriores(se necesita añadir “using System.Data.Entity.Core.Objects”)- DbFunctions: Versiones Entity Framework 6.0 y superior (se necesita añadir “using System.Data.Entity”). De hecho, si usamos “EntityFunctions” en la versión 6, nos avisará que la función esta obsoleta (aunque seguirá funcionando).
El método “TruncateTime”. Este método trunca la parte de tiempo, y solo usará la parte de fecha ¡¡¡¡Justo lo que necesitamos!!!!!!
Por tanto, el where necesario a construir es:
[code language=”csharp”]
DateTime FechaBuscada = Convert.ToDateTime("07/04/2014");
db.Blogs.Where(i => DbFunctions.TruncateTime(i.FechaCreacion) == DbFunctions.TruncateTime(FechaBuscada));
[/code]
En esta ocasión si nos encuentra más de un resultado.
Javi Giner
Latest posts by Javi Giner (see all)
- IIS Express Visual Studio, como configurar para permitir conexiones remotas - febrero 26, 2016
- Evento solidario sobre Innovación - diciembre 14, 2015
- Uso de Component en Unity - noviembre 10, 2015
genial,
fue muy útil, gracias broth