6.28.2012

Implementando un Foreach con expresión Lambda

En días pasados dando una capacitación, le solicité al grupo de desarrolladores que hicieran un método que recibiera una lista de clientes y un parámetro tipo string –> en este caso el país –> para filtrar la lista con este parámetro y retornar otra lista con los clientes que pertenecen al país solicitado. Como era de esperarse, la mayoría de los estudiantes solucionó el problema con un foreach y haciendo una comparación en cada iteración. Sin embargo, creo que es mucho más simple implementar esta solución a través de una expresión lambda y es lo que me llevó a escribir este post.

En primera instancia vamos a escribir la clase cliente sobre la cual vamos a llevar a cabo el procedimiento.

public class Cliente
{
public int Id { get; set; }
public string Nombre { get; set; }
public string Apellido1 { get; set; }
public string Apellido2 { get; set; }
public string Pais { get; set; }
}

Ahora procedemos a escribir el método que recibirá la lista de clientes y procederá a retornar otra lista filtrada con el parámetro número 2 –> el país de donde quiero los clientes.

public List<Cliente> ObtenerPorPais(List<Cliente> pLista, string pPais)
{
return pLista.Where(p => p.Pais == pPais).ToList();
}

En este código se va a comprara cada uno de los elementos de la lista, y los que cumplan con la condición ( p.Pais == pPais) serán retornados en una lista cuyo tipo se infiere a partir del tipo de la lista original y de la invocación del método ToList().


Como podemos ver en el método anterior, es mucho más simple implementar la solución con una expresión lambda y un método de extensión de linq que utilizar un foreach y una comparación por cada elemento de forma manual.



Etiquetas de Technorati: ,,,,

4 comentarios:

Ulises Aguilar dijo...

seve mas facil...

Luis D. Rojas dijo...

Ulises, No se como darle like a lo que pusiste :)

Unknown dijo...

Creo que sería todavía mejor si aceptarías un IEnumerable y regresarías un IEnumerable: mas flexibilidad para los que hacen la llamada.
Saludos.

BQ dijo...

Yo recien acabo de aprender eso pero en Eclipse, y ahora me doy cuenta de que también se puede en VS y es prácticamente de la misma manera. ¡Qué bien! Ya lo puedo hacer en ambos.