How to update the properties of the elements of a list using Linq?

1

Good day community, there is a common scenario and I have not seen any similar question, so I will share the solution right away.

Basically, we have a list of elements and we want to update one particular property using Linq .

using System;
using System.Linq;
using System.Collections.Generic;                   
public class Program
{
    public static void Main()
    {
        Console.WriteLine("¡Saludos Hermandad de SOes!");

        List<Movil> lista = new List<Movil>(){
        new Movil(){
            Id = 1, Marca = "iPhone", Conexion = "LTE"},
        new Movil(){
            Id = 2, Marca = "Samsung", Conexion = "4G"},
            new Movil(){
            Id = 3, Marca = "Xiaomi", Conexion = "4G"}
        };

        Console.WriteLine("Seleccionar todos los 4G");

        var listaFiltrada = lista.Where(elemento=>elemento.Conexion.Equals("4G", StringComparison.InvariantCultureIgnoreCase));
        foreach(var item in listaFiltrada){
            Console.WriteLine("{0} - {1} - {2}", item.Id, item.Marca, item.Conexion);
        }

        Console.WriteLine("Actualizando de 4G a LTE");
        //Aqui quiero hacer uso de Linq en vez de usar un bucle for, foreach
    }

    public class Movil{
        public int Id {get;set;}
        public string Marca {get;set;}
        public string Conexion {get;set;}
    }
}
    
asked by fredyfx 09.06.2018 в 00:12
source

1 answer

1

In some cases it may be necessary to use a .ToList() after using .Select() , this allows the .Select() to be evaluated and the update applied.

If you are using a list like in this example, everything looks fresh.

using System;
using System.Linq;
using System.Collections.Generic;                   
public class Program
{
    public static void Main()
    {
        Console.WriteLine("¡Saludos Hermandad de SOes!");

        List<Movil> lista = new List<Movil>(){
        new Movil(){
            Id = 1, Marca = "iPhone", Conexion = "LTE"},
        new Movil(){
            Id = 2, Marca = "Samsung", Conexion = "4G"},
            new Movil(){
            Id = 3, Marca = "Xiaomi", Conexion = "4G"}
        };

        Console.WriteLine("Seleccionar todos los 4G");

        var listaFiltrada = lista.Where(elemento=>elemento.Conexion.Equals("4G", StringComparison.InvariantCultureIgnoreCase));
        foreach(var item in listaFiltrada){
            Console.WriteLine("{0} - {1} - {2}", item.Id, item.Marca, item.Conexion);
        }

        Console.WriteLine("Actualizando de 4G a LTE");
        listaFiltrada = listaFiltrada.Select(x => { x.Conexion = "LTE"; return x; }).ToList();
        foreach(var item in listaFiltrada){
            Console.WriteLine("{0} - {1} - {2}", item.Id, item.Marca, item.Conexion);
        }
    }

    public class Movil{
        public int Id {get;set;}
        public string Marca {get;set;}
        public string Conexion {get;set;}
    }
}

If you want to update several properties:

listaFiltrada = listaFiltrada
                .Select(x => {
                        x.Conexion = "LTE";
                        x.Marca="WASD"; 
                        return x; 
                 });
    
answered by 09.06.2018 / 00:12
source