Buscador dinámico en C# .Net Windows Forms

En este video te mostrare paso a paso como crear un buscador dinámico en Windows Forms.

Crearemos una base de datos en Sql Server la cual anexaremos a nuestro proyecto por medio de Entity Framework y crearemos la lógica para búsquedas dinámicas por medio de la interface IQueryable y Linq.

Curso gratuito de C# 8 .Net, Default interface methods, #5

En este video te hablare de una de las novedades que trae c# 8 con la cual ya puedes ser capaz de implementar métodos por defecto en tus interfaces.

Video Anterior

¿Qué son y para qué sirven las interfaces en C#?, Programación Orientada a Objetos

En este video te explicare para que sirven las interfaces en C#, que son y cómo se utilizan o para que ayudan a un programador.

Strategy en C# .Net, Patrones de diseño, design patterns, #5

En este video te explicare el patrón de diseño strategy, también te explicare cuando usarlo y como crearlo. Todo en c# .net.

¿Cuál es la diferencia de IEnumerable e IQueryable? .Net C# VB

Cuando comenzamos a utilizar Entity Framework vemos la maravilla de LINQ al obtener los datos de manera relacional, organizarlos como si de Sql se tratara, pero nunca nos preguntamos que de distinto tiene cuando utilizamos IQueryable o IEnumerable, para explicarlo rápidamente nos basaremos en la siguiente tabla (suponiendo que su nombre es tabla, literal):

Cuando obtenemos los datos con IEnumerable de la siguiente forma:


IEnumerable<tabla> lst= from d in db.tabla
                 select d;

Si quisiéramos hacer un filtrado con una clausula where posterior a nuestra obtención de datos haríamos lo siguiente:


lst= lst.Where(d=&gt;d.name=='Pedro');

Cuando utilizamos IEnumerable al llenar nuestro objeto con LINQ lo que obtenemos son los datos de la tabla en nuestra colección es decir, que al aplicar el filtrado trabajamos directamente con un conjunto de datos en memoria al cual se le hace el where directamente. Esto ocasiona un mal performance cuando nuestra tabla tiene millones de datos ya que los tendríamos en memoria y posterior aplicaríamos el filtrado, esto es una mala practica que jamas se debe hacer.

Ahora veamos la diferencia con IQueryable:


IQueryable<tabla> lst= from d in db.tabla
                 select d;

//lo que obtiene IQueryable despues de la consulta es:
// select * from tabla

Ahora haremos el mismo filtro posterior a la consulta:


lst= lst.Where(d=>d.name=='Pedro');

//y aquí lo que hacemos es concatenarle:
select * from tabla where name='Pedro'

A diferencia de IEnumerable lo que tenemos en nuestro objeto IQueryable es la consulta SQL en sí, es decir tenemos algo como lo siguiente:


select * from tabla
where name='Pedro'

En conclusión si vamos a realizar filtrados dinámicos en un conjunto de datos se debe utilizar la interface IQueryable, es la forma correcta de aplicar manipulación a nuestra consulta antes de enviarla al servidor de base de datos. ¿Cuando se realizar el envió de la consulta al servidor por parte de IQueryable? Cuando hacemos uso de los datos es decir, cuando aplicamos un foreach o hacemos un ToList().