Aprende LINQ en unos minutos y aplícalo en tus proyectos con C#
Trabaja con objetos y colecciones como un pro de forma eficiente y rápida 😙

Como ya he mencionado antes, este blog trata de ser práctico o lo que es lo mismo: pragmático. Por eso aplicaremos Pareto a un componente de la plataforma .NET Framework y .NET Core y te mostraré ese 20% de Linq que usarás en el 80% de los proyectos que te asignen, te mostraré que es y algunos casos prácticos, comencemos:

Qué es Linq

Es un lenguaje de consulta de .Net que te permite trabajar sobre colecciones de objetos, es decir te permite trabajar con objetos en memoria con un lenguaje similar a SQL, esto simplifica enormemente el tratamiento de los objetos que muchas veces suele tornarse engorroso o que debes hacer muchas iteraciones para conseguir lo que quieres.

Se aprende con ejemplos así que allá vamos, veremos 4 casos que te ayudarán a entender mejor lo que te manifiesto:

Ordenar un arreglo de enteros

En este caso imagina que tenemos un arreglo de enteros y queremos ordenarlo. Tu estarás diciendo ¿por qué no aplicamos algún algoritmo de ordenamiento como BubbleSort o mejor aún QuickSort?. Es cierto estimado lector que podrías hacerlo y de hecho yo recomiendo aprenderse al menos los 4 algoritmos más conocidos de ordenamiento para cultura general y desarrollar tus habilidades lógico-resolutivas, pero te lo diré sin anestesia 😉 seamos realistas también, en casos en los que tengamos que optimizar los recursos al máximo y una millonésima de segundo más o menos sea un caso de vida o muerte deberíamos aplicar un algoritmo y optimizarlo o incluso hacer uno propio, para el 99% de los casos restantes: no debemos reinventar la rueda, así que lo más sensato es aplicar Linq.

Trabajaremos con C#, recordar incluir estas líneas de código para hacer uso de las librerías necesarias:

using System.Collections.Generic;
using System.Linq;

Si te es familiar T-SQL, entonces Linq te parecerá pan comido, si no, no te hagas drama que aquí lo aprenderás, vamos al código:

        static void Main(string[] args)
        {
            Console.WriteLine("*** APRENDIENDO LINQ ***");
            int[] arreglo = {0,1,7,5,3,2};

            int[] subarreglo = (from l in arreglo orderby l ascending select l).ToArray();

            foreach (int item in subarreglo)
            {
                Console.WriteLine(item);
            }

            Console.ReadLine();
        }

Tenemos dos arrays, arreglo es el inicial y subarreglo es en el que trabajaremos, es decir el final.

La línea resaltada es la que contiene la sentencia con Linq, le indicamos de donde obtener la data, en este caso de la variable arreglo y se lo asignamos a una variable interna, en este caso la letra l, también le indicamos si el ordenamiento es ascendente o descendente.

El resultado es el siguiente:

Asunto resuelto con una línea de código, no fue necesario codificar nuestro algoritmo de búsqueda, hazle modificaciones y prueba más casos.

Filtrar un arreglo de enteros

En este caso vamos a tomar algunos valores del arreglo, los que cumplan con la siguiente condición: los mayores a 3, veamos cómo sería:

        static void Main(string[] args)
        {
            Console.WriteLine("*** APRENDIENDO LINQ ***");
            int[] arreglo = {0,1,7,5,3,2};

            int[] subarreglo = (from l in arreglo where l > 3 select l).ToArray();
            foreach (int item in subarreglo)
            {
                Console.WriteLine(item);
            }
            Console.ReadLine();
        }

El resultado es el siguiente:

Genial no? Tu intenta ponerle otras condiciones, puedes añadirle más en el where, por ejemplo:

where l > 3 && l < 7

Buscar un alumno en una colección

Hasta ahora hemos trabajado sobre arreglos de tipo primitivo como enteros, también podemos trabajar sobre tipos complejos como una clase, tenemos a una clase llamada alumno:

        public class alumno
        {
            public int codigo { get; set; }
            public string nombre { get; set; }
            public int edad { get; set; }

            public alumno(int codigo, string nombre, int edad)
            {
                this.codigo = codigo;
                this.nombre = nombre;
                this.edad = edad;
            }
        }

Y lo que queremos es obtener el código de una alumna llamada "Ana", veamos:

        static void Main(string[] args)
        {
            Console.WriteLine("*** APRENDIENDO LINQ ***");
            List<alumno> listadoAlumnos = new List<alumno>()
            {
                new alumno(1, "Gerson", 20),
                new alumno(2, "Luis", 25),
                new alumno(3, "Yesica", 17),
                new alumno(4, "Ana", 28),
                new alumno(5, "Estefany", 27)
            };
            alumno alumnoBuscado = (from l in listadoAlumnos where l.nombre == "Ana" select l).FirstOrDefault();

            Console.WriteLine(alumnoBuscado.codigo);
            Console.ReadLine();
        }

El resultado es 4 como se muestra a continuación, lo cual es correcto! 😙

Mostrar alumnos que cumplen una condición determinada

Se nos pide ahora mostrar aquellos alumnos que cumplan la siguiente condición: Tengan 20 años o más, codifiquémoslo:

        static void Main(string[] args)
        {
            Console.WriteLine("*** APRENDIENDO LINQ ***");

            List<alumno> listadoAlumnos = new List<alumno>()
            {
                new alumno(1, "Gerson", 20),
                new alumno(2, "Luis", 25),
                new alumno(3, "Yesica", 17),
                new alumno(4, "Ana", 28),
                new alumno(5, "Estefany", 27)
            };

            var alumnoBuscado2 = (from l in listadoAlumnos where l.edad >= 20 select l).ToList();

            foreach (var item in alumnoBuscado2)
            {
                Console.WriteLine(item.nombre);
            }

            Console.ReadLine();
        }

Como resultado obtenemos esto:

Lo cual es muy cierto ya que sólo Yésica es menor a 20 años, y pues eso es todo por ahora, lo que debes hacer es confeccionarte un cheat-sheet y ponerte a practicar.

via GIPHY

Entonces estimado lector qué te pareció? Coméntame en la caja de comentarios o comparte el conocimiento para que muchos más puedan beneficiarse, espero haberte aportado valor, un saludo y hasta la próxima crack de cracks! 😊

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *