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.
Mas información.
join (Cláusula, Referencia de C#)
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; } }
Public Class Categoria Public Property CatId() As Integer Public Property CatNombre() As String Sub New(ByVal id As Integer, ByVal nom As String) CatId = id CatNombre = nom End Sub End Class
Public Class Articulo Public Property ArtId() As Integer Public Property ArtNombre() As String Public Property ArtPrecio() As Double Public Property CatId() As Integer Sub New(ByVal id As Integer, ByVal nom As String, ByVal prec As Double, ByVal cat As Integer) ArtId = id ArtNombre = nom ArtPrecio = prec CatId = cat End Sub End ClassComo 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) };
Dim categorialist As New List(Of Categoria)() From { New Categoria(1, "Bebidas"), New Categoria(2, "Lacteos"), New Categoria(3, "Frutas") } Dim articulolist As New List(Of Articulo)() From { New Articulo(1, "Cerveza negra Steeleye", 18.2, 1), New Articulo(2, "Queso Mozzarella", 34.5, 2), New Articulo(3, "Naranjas", 10.25, 3), New Articulo(4, "Cerveza Sasquatch", 15.0, 1), New Articulo(5, "Crema de Almejas", 9.75, 2), New Articulo(6, "Manzanas", 4.5, 3), New Articulo(7, "Vino Côte de Blaye", 250.25, 1), New Articulo(8, "Cerveza Heineken", 20.5, 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(); }
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim query = From art In articulolist Select art DataGridView1.DataSource = query.ToList() End Sub
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();
Dim query = From cat In categorialist Join art In articulolist On cat.CatId Equals art.CatId Order By art.ArtId Ascending Select New With {.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.
Eso es todo espero les sirva mucho saludos desde El Salvador...
Descargar Proyecto C#
Descargar Proyecto VB.Net
No olvides suscribirte al blog para estar pendientes de mis últimos artículos.
Si quieren donarme para una soda lo pueden hacer aqui.
0 Comentarios