Introducción

Hasta ahora hemos insertado categorías, vehículos y estacionamientos dentro de ParkingApp. Antes de continuar con la actualización (update) de objetos en ef core 2, vamos a ejecutar una serie de consultas y filtros sobre nuestra base de datos.

Al igual que cuando insertamos, cuando realizamos consultas, estas las hacemos sobre el DbSet<T>. 

Comenzando con las consultas y filtros

La primera consulta que vamos a ejecutar sobre nuestra base de datos es un select básico de nuestra tabla categorías.

Para esto utilizamos .ToList() sobre nuestro DbSet<Category>.

var categories = _context.Categories.ToList();
categories.ForEach(p => Console.WriteLine(p.Name));

El output de nuestro SQL es el siguiente

simple_select
simple_select

 Ademas, se puede observar que imprimimos en consola la lista de categorías a traves del .ForEach(). 

Primer elemento con FirstOrDefault()

FirstOrDefault() nos permite obtener el primer elemento y a su vez pasar un parámetro que funcione como condición. Por ejemplo, necesitamos obtener el vehiculo con placa NJS981

Entonces

var oneVehicles = _context.Vehicles.FirstOrDefault(p => p.LicensePlate == "NJS981");

En el caso de que no encuentre un vehículo dada la condición pasada, devolver null para ese objeto.

query_FirstOrDefault
query_FirstOrDefault

Buscando elemento por id con Find()

Cuando queremos buscar un elemento por id, es posible usar el método Find().

var findVehicle = _context.Vehicles.Find(1);

En este caso vamos a buscar el vehículo que tenga el ID = 1

query_findId
query_findId

ef core arma la query enviando como parámetro el Id de la entidad y ejecuta un top(1) sobre los resultados para obtener un único registro.

Haciendo uso de LIKE en ef core

Esta funcionalidad es nueva en ef core 2 y se puede utilizar como alternativa al método .Contains() que utilizábamos en versiones anteriores de entity framework.

Permite buscar elementos en una tabla especificando un comodín. 

var likeVehicle = _context.Vehicles.Where(p => EF.Functions.Like(p.LicensePlate, "%9%")).ToList();

Esta consulta permite obtener vehículos que sus placas contengan el carácter “9” en cualquier parte de la longitud de la placa.

Por ejemplo, con las siguientes placas

  • NJS981
  • KSJ198
  • LSK123
  • SHD290
query_LIKE
query_LIKE

Como ejecutar CORRECTAMENTE LastOrDefault()

Muchas veces necesitamos obtener el ultimo elemento que se haya insertado en una tabla. Para esto, utilizamos los métodos Last() LastOrDefault(). Al usar estos métodos es necesario ordenar (OrderBy) los resultados para que ef core arme el SQL con una ordenación descendente y utilice TOP(1).

Veamos las dos consultas con sus resultados.

Sin OrderBy

var lastVehicle = _context.Vehicles.LastOrDefault(p => p.LicensePlate == "NJS981");

Con OrderBy

var lastVehicleCorrect = _context.Vehicles.OrderBy(p => p.Id).LastOrDefault(p1 => p1.LicensePlate == "NJS981");

Resultado

query_lastOrDefault
query_lastOrDefault

 Es así, como ef core traduce la consulta LINQ al comando SQL.

GITHUB /mpetrinidev

/blog-parking-ef-core-2

Branch [query-filter]

¡Si te gusto el articulo, compártelo con tus contactos en las redes sociales!

Escribe una respuesta a este comentario

avatar
500
  Subscribe  
Notificar de