jueves, 24 de febrero de 2011

Entity Framework: Filtrar datos con Linq en C#

Voy a escribir un tema que me ha llevado varias horas de búsquedas por internet. Lo que vamos a realizar es una búsqueda con Linq cuando se trata de filtrar por más de un campo.Tenemos un formulario como el siguiente:

image


Donde los nombre de las variables son:
string nombre = tbNombre.Text;
string apellido1 = tbApellido1.Text;
string apellido2 = tbApellido2.Text;

En este ejemplo vamos a desestimar la estructura del proyecto correcto, no haremos, entre otras cosas, clase de acceso a datos.

Tenemos en nuestra base de datos una tabla cliente con los atributos nombre, apellido1 y apellido2. Esta tabla ha sido mapeada con Entity Framework y, lo que hará la función siguiente es devolver una lista con todos los clientes que cumplen los requisitos.

public List<cliente> Buscar()
{
ejemploEntities entity = new ejemploEntities();

var query = from p in entity.cliente
            select p;

if (nombre != string.Empty)
    query = query.Where(p => p.nombre == nombre);

if (apellido1 != string.Empty)
    query = query.Where(p => p.apellido1 == apellido1);

if (apellido2 != string.Empty)
    query = query.Where(p => p.apellido2 == apellido2);

return query.ToList();
}

Como vemos el procedimiento es bien sencillo, hacemos una consulta que nos devuelva todos los datos y, los almacenamos en la variable query . Después vamos haciendo filtros sucesivos que irán restringiendo los datos que contendrá query. Por ultimo, devolvemos una lista que será asignada al atributo dataSource de nuestro DataGridView.

3 comentarios:

  1. Techno-UA Creo que esto me va a ser bastante útil para prácticas de DPAA Gracias!

    ResponderEliminar
  2. Seguiré escribiendo más cosas sobre Linq y Entity Framework, sin lugar a dudas te lo recomiendo para el CAD de DPAA.

    ResponderEliminar
  3. Si es interesante, pero no funcionaria con un volumen muy grande de datos.

    ResponderEliminar