Saltar al contenido

LinQ C#: La cláusula Select o SelectMany

 Select o SelectMany de LINQ , como deberias usar esta clausula dentro de tu CRUD de aplicaciones puesto que estos elementos de proyección son escenciales para desarrollar en C# o Vb.net.

Este articulo resalta las principales como deberias usarlos y su forma de implementar.

Índice

    Descarga aplicación ejemplo

    Te dejo un ejemplo de una aplicación de consola que implementa un CRUD básico para la clase «Persona» utilizando LINQ y C# usando select y selectmany.

    Select o SelectMany como funciona?

    Para poder enteneder el uso de cada clausula, imagina que tienes una caja llena de dulces y quieres elegir algunos para comer.

    • Si solo puedes elegir un dulce a la vez, es como un «Select«. Elegirías un solo dulce de la caja y lo comerías.
    • Si puedes elegir más de un dulce a la vez, es como un «SelectMany«. Podrías elegir varios dulces de la caja y comerlos juntos.

    En el linq C# o VB.ne es similar. Hay momentos en los que quieres elegir una sola opción, como por ejemplo cuál es tu película favorita, y hay momentos en los que quieres elegir más de una opción,»Select» y «SelectMany» en LINQ son similares en cuanto a la capacidad de selección de uno o múltiples elementos.

    CRUD base de datos

    Linq select c# ejemplo

    Aquí te muestro un ejemplo de cómo usar «Select» en LINQ para hacer lo mismo que en el ejemplo anterior con «SelectMany». Imagina que tienes una lista de objetos de la clase «Persona» y deseas obtener una secuencia que contenga los ingresos de todas las personas.

    Se puede hacer lo siguiente:

    List<Persona> personas = ...;
    
    IEnumerable<decimal> ingresos = personas.Select(p => p.Ingresos);
    

    En este ejemplo, «Select» se usa para proyectar los ingresos de cada persona en una nueva secuencia. La expresión lambda «p => p.Ingresos» se usa para seleccionar solo los ingresos de la persona «p».

    Si deseas trabajar con lista anidadas, puedes hacer lo siguiente:

    public class Persona
    {
        ...
        public List<Trabajo> Trabajos { get; set; }
    }
    
    ...
    
    List<Persona> personas = ...;
    
    IEnumerable<List<Trabajo>> trabajosDeCadaPersona = personas.Select(p => p.Trabajos);
    
    IEnumerable<Trabajo> trabajos = trabajosDeCadaPersona.SelectMany(t => t);
    

    En este ejemplo, primero se usa «Select» para proyectar la lista de trabajos de cada persona en una nueva secuencia. La expresión lambda «p => p.Trabajos» se usa para obtener la lista de trabajos de la persona «p». Luego, se usa «SelectMany» para proyectar todos los trabajos de todas las personas en una nueva secuencia. La expresión lambda «t => t» se usa para proyectar cada lista de trabajos en una secuencia de trabajos individuales.

    Linq SelectMany C# ejemplo

    Aquí te muestro un ejemplo de cómo usar «SelectMany» en LINQ para trabajar con la clase «Persona». Imagina que tienes una lista de objetos de la clase «Persona» y deseas obtener una secuencia que contenga los ingresos de todas las personas.

    Se puede hacer lo siguiente:

    List<Persona> personas = ...;
    
    IEnumerable<decimal> ingresos = personas.SelectMany(p => new[] { p.Ingresos });
    

    En este ejemplo, «SelectMany» se usa para proyectar los ingresos de cada persona en una nueva secuencia. La expresión lambda «p => new[] { p.Ingresos }» se usa para crear una nueva secuencia que contenga solo los ingresos de la persona «p».

    También es posible usar «SelectMany» para trabajar con colecciones anidadas. Por ejemplo, si la clase «Persona» tuviera una lista de objetos «Trabajo», se puede usar «SelectMany» para proyectar todos los trabajos de todas las personas en una nueva secuencia:

    public class Trabajo
    {
        public string Nombre { get; set; }
        public decimal Salario { get; set; }
    }
    
    public class Persona
    {
        ...
        public List<Trabajo> Trabajos { get; set; }
    }
    
    ...
    
    List<Persona> personas = ...;
    
    IEnumerable<Trabajo> trabajos = personas.SelectMany(p => p.Trabajos);
    

    En este ejemplo, «SelectMany» se usa para proyectar todos los trabajos de todas las personas en una nueva secuencia. La expresión lambda «p => p.Trabajos» se usa para obtener la lista de trabajos de la persona «p».

    Select y SelectMany en un CRUD

    Aquí te muestro cómo podrías aplicar «Select» y «SelectMany» en un CRUD (Create, Read, Update, Delete) usando LINQ y C#. Imagina que tienes una lista de objetos de la clase «Persona» y deseas implementar las siguientes operaciones:

    1. Obtener una persona por su ID
    2. Obtener todos los nombres de las personas
    3. Actualizar la fecha de nacimiento de una persona por su ID
    4. Eliminar una persona por su ID

    Ejemplos de CRUD con «Select» y «SelectMany»

    Sí, LINQ en C# se puede usar para realizar actualizaciones en colecciones de datos, además de consultas.

    Por ejemplo, si se tiene una lista de objetos y se desea actualizar el valor de una propiedad de cada objeto en la lista, se puede usar LINQ para hacerlo de manera eficiente. Se puede usar la operación «Select» o «SelectMany» para proyectar los objetos en una nueva secuencia, realizar las actualizaciones necesarias en los objetos y luego guardarlos en la colección original.

    Estos son lps mas generales que puedes encontrar en cualquier aplicación por lo cual aqui te muestro como funcion en cada caso.

    Cómo podrías implementar cada una de estas operaciones:

    1. Obtener una persona por su ID:
    List<Persona> personas = ...;
    
    int id = ...;
    
    Persona persona = personas.FirstOrDefault(p => p.Id == id);
    

    En este ejemplo, se usa «FirstOrDefault» para obtener la primera persona que tenga el ID especificado. La expresión lambda «p => p.Id == id» se usa para filtrar las personas por el ID.

    1. Obtener todos los nombres de las personas:
    List<Persona> personas = ...;
    
    IEnumerable<string> nombres = personas.Select(p => p.Nombre);
    

    En este ejemplo, se usa «Select» para proyectar los nombres de todas las personas en una nueva secuencia. La expresión lambda «p => p.Nombre» se usa para seleccionar solo los nombres de cada persona.

    1. Actualizar la fecha de nacimiento de una persona por su ID:
    List<Persona> personas = ...;
    
    int id = ...;
    DateTime fechaNacimiento = ...;
    
    Persona persona = personas.FirstOrDefault(p => p.Id == id);
    
    if (persona != null)
    {
        persona.FechaNacimiento = fechaNacimiento;
    }
    

    En este ejemplo, se usa «FirstOrDefault» para obtener la primera persona que tenga el ID especificado. La expresión lambda «p => p.Id == id» se usa para filtrar las personas por el ID. Luego, si la persona existe, se actualiza su fecha de nacimiento.

    1. Eliminar una persona por su ID:
    List<Persona> personas = ...;
    
    int id = ...;
    
    personas.RemoveAll(p => p.Id == id);
    

    En este ejemplo, se usa «RemoveAll» para eliminar todas las personas que tengan el ID especificado. La expresión lambda «p => p.Id == id» se usa para filtrar las personas por el ID.

    Además de las actualizaciones, LINQ también proporciona otras operaciones útiles para trabajar con colecciones de datos, como filtrado, agrupamiento, ordenamiento y agregación. Estas operaciones se pueden combinar para crear consultas complejas sobre colecciones de datos.

    En conclusion

    En el LINQ C# para trabajar es similar a las elecciones que hacemos para comer o ver una pelicual. Hay momentos en los que quieres elegir una sola opción, como por ejemplo cuál es tu película favorita, y hay momentos en los que quieres elegir más de una opción, como por ejemplo cuáles son tus películas favoritas.

    espero esto te pueda funcionar comentanos

    Hasta la proxima gracias :D!!