Saltar al contenido

C# Linq where , como filtrar

Para filtrar informacion usando C# linq con la clausula where es muy parecido a lo que estariamos haciendo con la clausula where de sql para filtrar tablas la diferencia es que nuestras busquedas estaran basadas en objetos y propiedades que serian las columnas de una tabla.

En Linq usamos la clausula para filtrar listas asi como seleccionar. El framework 7 de linq ofrece diversas funciones que nos permiten realizar consultas complejas en una sola linea, además de las búsquedas mas simples como puede ser una consulta de una sola columna con el operador de igual igual (==) de C#.

Índice

    La sintaxis para usar el where en linq

    «`

    var filteredList = list.Where(x => x == "someValue");

    «`

    Esta clausula linq nos retornara un nuevo objeto con los elementos que cumplan con la condicón especificada, el tipo de resultado sera IEnumerable.

    Esta clausula linq es generalmente usada para filtrar listas de objetos de acuerdo a uno o mas criterios y tambien permite crear consultas dinámicas en donde los parametros de busqueda pueden variar dependendiendo de los requisitos del usuario.

    CRUD base de datos

    Consultar una lista en Linq

    Una lista en C# es una coleccion de elementos definidos, cada uno de ellos tiene propiedades, linq provee metodos que nos permiten filtrar consultas de acuerdo a estas propiedades.

    Veamos el siguiente ejemplo una clase de empleados

    public class empleado
    {
            public int EmpleadoID { get; set; }
            public string Name { get; set; }
            public string EmailAddress { get; set; }
            public string Department { get; set; }
            public Datetime DOB { get; set; }
            public string Gender { get ; set; }
    }
    

    Ahora debemos crear una lista para llenarla con la informacion de los empleados para esto necesitamos hacer lo siguiente

     public List Getempleado() {
        List empleados = new List();
        empleados .Add(new empleado{ ID = 1, Name = "Jose Perez",  EmailAddress = "Name1@abc.com"  , Department = "ComputerScience "  , DOB = "YYYY-MM-DD "  , Gender = "Option A " });
        empleados .Add(new empleado{ ID = 2, Name = " Miguel Perez", EmailAddress = "Name2@abc.com "  , Department = "ComputerScience "  , DOB = "YYYY-MM-DD "  , Gender = "Option A "  });
        empleados .Add(new empleado{ ID = 3, Name = " Alejandro Pina", EmailAddress = "Name3@abc.com "  , Department = "ComputerScience "  , DOB = "YYYY-MM-DD "  , Gender = "Option B " });
        empleados .Add(new empleado{ ID = 4, Name = " Manuel Rodriguez",  EmailAddress = "Name4@abc.com "  , Department = "ComputerScience "  , DOB = "YYYY-MM-DD "  , Gender = "Option B" });
        return empleados;
    }
    

    luego de tener nuestra lista completa podemos proceder con hacer nuestra consulta la cual podemos hacer seleccionando todos los registros o filtrando por uno o varios campos.

    Como filtrar por mas de un campo ?

    Para filtrar en linq contamos con distintos operadores los cuales son:

    • && : que indica la condicion de AND
    • || : que indica la condición de OR
    • ! : que indica negación.
    • ==: indica igualdad.

    Ahora para filtrar nuestra lista de empleados usando mas de un campo en linq usamos el siguiente sintaxis:

    var empleadosFiltrado = empleados.Where
    (emp =>; emp.Gender == "Option A" 
     && emp.Department == "ComputerScience");

    Esta linea retornará a los dos primeros elementos de la lista que cumplan con el criterio.

    Linq contain para que funciona ?

    La clausula linq contine es un metodo de linq que nos ayuda a verificar si una lista contiene un elemento. Esta se usa para buscar dentro de los elementos de una lista enviando como parámetro el valor a buscar.

    Ejemplo de contains linq

    var empleados= empleados.Any(emp =>emp.Name.contains("Perez"));

    La linea de código anterior nos devolverá un valor boolean si contiene algun elemento con el nombre «Perez». nuestra lista solo mostrara los empleados que tenga en dentro de su nombre el apellido «Perez».

    Cómo realizar «contains» en LINQ.

    para realizar esta consulta en linq debemo auxiliarnos de las funcion lower o upper las cuales nos ayudan a convertir los valores a minúsculas para posteriormente compararlos.

    Ejemplo linq lower o upper

    var empleados= empleados.Any(emp =>EMP.Name.ToLower().contains(«perez»));

    Cuando se trata de comparar cadenas, usualmente necesitamos una búsqueda que no distinga entre mayúsculas y minúsculas para obtener coincidencias exactamente iguales a los registros deseados. Usando el método contains() en la clase dbcontext, automáticamente nos permitirá realizar la búsqueda con el operador LIKE ‘%hello%’. Esto nos ayudara a encontrar nuestras coincidencias tanto sin importancia si usamos mayusculas o minusculas.

    Descargar aplicación

    Te recomiendo Descargar esta aplicacion de consola que utiliza C# para que puedas trabajar con todos los elementos planteados. ademas te recomiendo la aplicacion completa de CRUD de linq para que puedas ver mas.

    En conclusion filtrar una lista usando linq es muy parecido a como trabajamos con los comandos de SQL, para los que estamos familiarizados con los comandos basicos de sql seria muy simple aprender a programar con Linq nuestros CRUD. comenta que tal te parecio esta entrada.

    hasta la proxima !!

    Gracoas :D!!