viernes, 11 de octubre de 2013

[Tip] Realizar consultas a través de Lambda Expressions en un DataSet con tablas relacionadas

En muchas de nuestras aplicaciones necesitamos persistir datos en memoria para usarlos a lo largo de la interacción del usuario en muchos ámbitos del sistema, en muchas de estas ocasiones optamos por el uso de los famosos DataSet, en los cuales almacenamos N DataTable, y cuando necesitamos creamos relaciones entre estos para optimizar y realizar consultas sobre ellos con mayor facilidad. por eso vamos a observar como podemos realizar consultas sobre DataTable relacionados a través de Lambda Expressions, y para eso crearemos un DataSet con la siguiente estructura:

            DataTable categorias = new DataTable();
            categorias.Columns.Add("id", typeof(int));

            DataTable productos = new DataTable();
            productos.Columns.Add("id", typeof(int));
            productos.Columns.Add("name", typeof(string));

            for (int i = 1; i < 4; i++)
            {
                categorias.Rows.Add(i);
            }

            Random rd = new Random(DateTime.Now.Millisecond);
            for (int i = 1; i < 11; i++)
            {
                productos.Rows.Add(rd.Next(1, 4), "Name" + i);
            }

            DataSet ds = new DataSet();
            ds.Tables.Add(categorias);
            ds.Tables.Add(productos);
            ds.Relations.Add(categorias.Columns[0], productos.Columns[0]);

Ahora veamos como realizar una consulta filtrando por el campo name:

var likejoin = category.Rows.OfType<DataRow>().Join(product.Rows.OfType<DataRow>(), cat => cat.Field<int>("id"),
prod => prod.Field<int>("id"), (cat, prod) => new { Id = cat.Field<int>("id"),
Nombre = prod.Field<string>("name") }).Where(c => c.Nombre.Contains("ElTavo"));

Observemos que a través de la extensión Join relacionamos las tablas que necesitemos, y debemos especificar la tabla de relación seguido de los campos de llave primaria que relacionaran las tablas, posteriormente especificamos que campos de las tablas vamos a mostrar en el resultado y por ultimo aplicamos la sentencia WHERE en este caso para filtrar los productos cuyo nombre contenga la palabra ElTavo.

Eso es todo, espero les sea de utilidad.

Saludos!!

No hay comentarios:

Publicar un comentario