[Tip] Clase DbFunctions: Usando funciones canónicas con LINQ to Entities en C#

En algunas ocasiones necesitamos hacer consultas LINQ to Entities usando Entity Framework y requerimos hacer cierto tipo de operaciones, como por ejemplo calcular diferencias entre fechas, redondear tiempos, entre otras, las cuales son muy comunes cuando usamos Transact SQL.

¿Pero cómo hacemos esto cuando estamos usando Entity Framework y escribiendo código C#? Pues aquí es cuando aparece la clase DbFunctions al rescate. Veamos algunos ejemplos sencillos usando LINQ to Entities.

Consultar las notificaciones creadas durante el último año (365 días):

var actualDate = DateTime.Now;
var query = context.Notifications
    .Where(x => DbFunctions.DiffDays(x.CreatedAt, actualDate) < 365);

Consultar las notificaciones creadas desde el día de hoy (se trunca el tiempo para remover la hora):

var actualDate = DateTime.Now;
var query = context.Notifications
    .Where(x => x.CreatedAt > DbFunctions.TruncateTime(actualDate));

Consultar las notificaciones creadas 5 días atrás (en este caso usando la función AddDays para restar días a la fecha de creación)

var actualDate = DateTime.Now;
var query = context.Notifications
    .Where(x => x.CreatedAt > DbFunctions.AddDays(actualDate, -5) && x.CreatedAt < actualDate);

Y bien, estos son solos algunos de los ejemplos para los que podemos usar las funciones que provee la clase DbFunctions. Por último quiero agregar un par de tips sobre uso:

  1. Para poder usar las funciones que provee DbFunctions, debemos hacer referencia al namespace System.Data.Entity.
  2. Algunas funciones que provee DbFunctions pueden ser usadas directamente y otras solo pueden ser referenciadas desde un query LINQ to Entities. En la documentación oficial pueden encontrar más detalle de cómo usar cada una de las funcionalidades.

Por último, les recomiendo que visiten la documentación oficial de MSDN para que conozcan todas las funciones que provee la clase DbFunctions.

¡Hasta una próxima!

 

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: