11.20.2008

Usando Linq para Hacer Búsquedas de Objetos en Listas Genéricas

En post pasados, vimos como realizar búsquedas de objetos en una lista genérica utilizando distintos métodos de la clase List. En este post, vamos a utilizar Linq para buscar objetos dentro de una lista genérica.

En primera instancia, vamos a utilizar la clase producto que hemos venido utilizando en post anteriores. Vamos a inicializar una lista de productos de la misma manera que lo hicimos en el post anterior:

List<Producto> listaProductos = new List<Producto>( )
{
new Producto ()
{
Id = 09,
Nombre = "Impresora Canon MP140",
PaisDeOrigen = "Japón",
Precio = 50
},
new Producto ()
{
Id = 15,
Nombre = "Age of Empires III",
PaisDeOrigen = "USA",
Precio = 29.99
},
new Producto ()
{
Id = 12,
Nombre = "Laptop Dell Vostro",
PaisDeOrigen = "USA",
Precio = 999
},
new Producto ()
{
Id = 33,
Nombre = "IPod Nano 2",
PaisDeOrigen = "USA",
Precio = 199.99
},
new Producto ()
{
Id = 26,
Nombre = "Audífonos JVC",
PaisDeOrigen = "Holanda",
Precio = 39.99
}
};



Seguidamente, vamos a crear una consulta utilizando LinqToObjects para buscar todos los objetos que tienen su país de origen igual a “USA”. El siguiente código nos muestra como hacerlo.



IEnumerable<Producto> resultado =
from producto in listaProductos
where producto.PaisDeOrigen ==
"USA"
select producto;


Console.WriteLine("----------------------------");
Console.WriteLine("Productos Originarios de USA");
foreach (Producto producto in resultado)
{
Console.WriteLine("----------------------------");
Console.WriteLine("Nombre: {0}\nPrecio: {1}",
producto.Nombre, producto.Precio);
}


Como podemos ver en el código anterior, Linq tiene una sintaxis muy similar a la de SQL Server, solamente que Linq además de poder ser utilizado en SQLServer (aunque parece que se va a descontinuar), es aplicable a Objetos, Xml, DataSet, EF y a los Data Services.



En este ejemplo, para retornar la lista de productos que tienen su país de origen como “USA”, se debe de asignar el resultado de la consulta a una lista genérica de productos, esta lista esta definida por IEnumerable<Producto>. A través de la claúsula from, estamos definiendo el origen de los datos, permitiendole a Linq iterar sobre cada producto para identificar las variables que cumplen con el criterio de selección a través de la palabra reservada from. Por último, se indica que se quiere proyectar ( seleccionar ) de la consulta realizada. En este caso escojimos seleccionar el producto como tal, pero como veremos en post posteriores, podemos utilizar tipos anónimos para seleccionar campos de un objeto, o de varios objetos utilizados como repositorio de datos.



El resultado al ejecutar la consulta anterior se puede ver en la siguiente imagen.



image

No hay comentarios: