Siguiendo con ejemplos de linq ahora veremos como funciona la cláusula Join.
La cláusula Join sirve para establecer una relación entre 2 secuencias comparando sus claves.
Los programadores familiarizados con conceptos de bases de datos relacionales reconocerán la cláusula Join como Inner Join.
El ejemplo esta desarrollado en visual estudio 2010 en ambos lenguajes c# y vb.net pero en este post solo lo explicare en c# pueden encontrar el ejemplo en vb.net y descargarlo en ambos lenguajes desde mi blog al final dejo el link.
Veamos el diseño que tendrá nuestra aplicacion.
Ahora agregaremos 2 clases Categoría y Articulo.
public class Categoria
{
public int CatId { get; set; }
public string CatNombre { get; set; }
public Categoria(int id, string nom)
{
CatId = id;
CatNombre = nom;
}
}
public class Articulo
{
public int ArtId { get; set; }
public string ArtNombre { get; set; }
public double ArtPrecio { get; set; }
public int CatId { get; set; }
public Articulo(int id,string nom,double prec, int cat)
{
ArtId = id;
ArtNombre = nom;
ArtPrecio = prec;
CatId = cat;
}
}
Como podemos notar son 2 clases sencillas con algunas propiedades que usaremos para representar nuestros datos, importante notar que ambas clases tienen una propiedad en común CatId que es la que usaremos para establecer la relación entre ellas.
Ahora agreguemos algunos registros.
List<Categoria> categorialist = new List<Categoria>
{
new Categoria(1, "Bebidas"),
new Categoria(2, "Lacteos"),
new Categoria(3, "Frutas")
};
List<Articulo> articulolist = new List<Articulo>
{
new Articulo(1, "Cerveza negra Steeleye", 18.20, 1),
new Articulo(2, "Queso Mozzarella", 34.50, 2),
new Articulo(3, "Naranjas", 10.25, 3),
new Articulo(4, "Cerveza Sasquatch", 15.00, 1),
new Articulo(5, "Crema de Almejas", 9.75, 2),
new Articulo(6, "Manzanas", 4.50, 3),
new Articulo(7, "Vino Côte de Blaye", 250.25, 1),
new Articulo(8, "Cerveza Heineken", 20.50, 1),
new Articulo(9, "CocaCola", 5.75, 1)
};
Hemos agregado 3 categorías y 9 artículos donde cada articulo tiene un código de categoría al que pertenece.
Carguemos los artículos en el datagrid sin aplicar join y veremos como se muestran.
private void Form1_Load(object sender, EventArgs e)
{
var query = from art in articulolist select art;
dataGridView1.DataSource = query.ToList();
}

Lo que hemos hecho es cargar los artículos en el datagrid normalmente.
Ahora veamos como utilizar el Join de linq para que no nos muestre el código de categoría(CatId) si no que nos muestre el nombre de la categoría la que el articulo pertenece.
var query = from cat in categorialist
join art in articulolist
on cat.CatId equals art.CatId
orderby art.ArtId ascending
select new { Id = art.ArtId, Nombre = art.ArtNombre, Precio = art.ArtPrecio, Categoria = cat.CatNombre };
dataGridView1.DataSource = query.ToList();
Como verán tiene un gran parecido al inner join de sql donde por medio de la propiedad que tienen en común CatId podemos establecer la relación entre ambas clases y así poder consultar los campos que necesitemos.
Pueden descargar el ejemplo en ambos lenguajes c# y vb.net desde mi blog.
http://cristiantorresalfaro.blogspot.com/2012/09/combinar-datos-linqoperador-join-c-vbnet.html
Para todos los que tienen blog pueden seguirme y estar pendientes de mis nuevos artículos.
