Cómo convertir una Lista de un tipo a otro en C#
Aprende a convertir listas de tipos complejo ya sea iterando o aprovechando LINQ 🦊✌️

Para convertir una lista a otra hay varios enfoques, y te mostraré los dos más utilizados.

Te pongo en contexto

Estás aplicando el patrón DTO y por eso necesitas convertir un List de tipo Estudiante a un List de tipo EstudianteDto.

Si no sabes qué es el patrón DTO, aquí te lo enseño.

public class Estudiante
{
	public int Id {get; set;}
	public string Nombre {get; set;}
	public int Edad {get; set;}
}

public class EstudianteDto
{
	public int Id {get; set;}
	public string Nombre {get; set;}
	public int Edad {get; set;}
}

Como puedes ver tienen las mismas propiedades, eso es muy común cuando queremos hacer una conversión entre listas.

Iterando por cada elemento

Esta forma de mapeo o conversión es la clásica y muy utilizada, consiste en iterar por cada elemento de la lista origen, en este caso List<Estudiante> e ir convirtiendo cada elemento al tipo EstudianteDto para finalmente agregarla a una nueva lista de tipo List<EstudianteDto>


		List<Estudiante> listaEstudiantes = new(){
			new Estudiante{ Id = 1, Nombre = "Juan", Edad = 20},
			new Estudiante{ Id = 2, Nombre = "Ana", Edad = 22},
		};
		
		List<EstudianteDto> listaEstudiantesDto = new();
		
        foreach(var item in listaEstudiantes)
		{
			listaEstudiantesDto.Add(new EstudianteDto{Id = item.Id, Nombre = item.Nombre, Edad = item.Edad});
		}

Utilizando LINQ

Esta forma es más limpia.

		List<Estudiante> estudiantes = new(){
			new Estudiante { Id = 1, Nombre = "Luis", Edad = 35  },
			new Estudiante { Id = 2, Nombre = "Juana", Edad = 32  }
		};
		
		List<EstudianteDto> estudiantesDto = estudiantes
			.Select(x => new EstudianteDto{ Id = x.Id, Nombre = x.Nombre, Edad = x.Edad})
			.ToList();

Eso es todo por ahora estimado dev! hasta la próxima la semana que viene! 🦊✌️

Si esta entrada te ha gustado crack, compártela! 🐿️😎

Créditos de foto de portada: Foto de Norbert Braun en Unsplash

Deja una respuesta

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