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!!