martes, 14 de febrero de 2012

LINQ, buscar elementos en un listado

Continuo con la sección de capsulas de código, donde sin entrar mucho en detalle, pongo trozos de código con una funcionalidad muy concreta.

Hoy vamos a “jugar” un poco con LINQ y las expresiones lamda, y vamos a usar la potencia que nos ofrecen para facilitarnos un poco a la hora de encontrar elementos dentro de un listado del tipo IEnumerable con unos cuantos ejemplos concretos.

LINQ nos ofrece varios selectores a la hora de obtener los valores.

Where: Devuelve todos los valores que coincidan con el criterio seleccionada.

Single: Solo devuelve un valor, pero generara una excepción en el caso de que el criterio de selección devuelva null o mas de un valor. Si no estamos seguros de que el criterio de filtrado siempre vaya a devolver un valor podemos usar SingleOrDefault, que devuelve null en caso de no tener ningún resultado. Si no estamos seguros de que vaya a devolver solo un valor, tenemos que usar Where, o tenemos la opción de usar First.

First: Devuelve el valor del primer elemento que coincida con el criterio de filtrado. Aquí también témenos la opción de usar FirstOrDefault.

Unos ejempolos:

            string busqueda = "criterio";
List<string> Lista = new List<string>();

//SINGLE
string result = Lista.Single(s => s == busqueda);

//WHERE
IEnumerable<string> results = Lista.Where(s => s == busqueda);

//FIRST
string result = Lista.First(s => s == busqueda);




¿Sencillo verdad?


Pero que pasa si el listado que tenemos es por ejemplo de una clase propia que hemos creado nosotros. Tenemos el Cast<T>


Un ejemplo:

var imagenBorrar = imagenes.Items.Cast<ImagenGaleria>().Single(i => i.Id == _idImagenBorrar);
imagenes.Items.Remove(imagenBorrar);




Eso es todo por hoy, espero que os sirva.


Nos leemos!



1 comentario: