none
Hacer JOIN con sentencias SQL con dos Datatables fuera de un origen de Base de Datos RRS feed

  • Pregunta

  • Amigos, tengo dos datatables que no proceden de Bases de Datos, sino que están montados en tiempo de ejecución mediante objetos DataTable, DataColumns, y DataRows.

    Si quiero hacer un JOIN mediante SQL entre las tablas, ¿cómo debería proceder?

    Gracias.

    Saludos.
    Francisco J.
    miércoles, 12 de agosto de 2009 16:39

Respuestas

Todas las respuestas

  • hola,

    puedes hacer uso de linq ?

    si es asi podrias utilziar algo como esto:

    Cross-Table Queries (LINQ to DataSet)


    veras en los ejemplos como utilzia el comando join aplicandolos a dataset

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta GSNet miércoles, 12 de agosto de 2009 20:56
    miércoles, 12 de agosto de 2009 19:47
  • Muchas gracias Leandro, voy a probarlo.

    Un saludo.
    Francisco J.
    miércoles, 12 de agosto de 2009 20:56
  • Amigo, para quién le sirva aquí está el código usado:

    Public Class Form1
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Me.Load
            Dim ds As DataSet = PoblarDataSet()
    
            dgvRoad.DataSource = ds.Tables("Tabla_Carreteras")
    dgvCharacteristics.DataSource = ds.Tables("Tabla_Caracteristicas") Dim DataTableCarreteras As DataTable = ds.Tables("Tabla_Carreteras")
    Dim DataTableCaracteristicas As DataTable = ds.Tables("Tabla_Caracteristicas")
    Dim result = From carreteras In DataTableCarreteras.AsEnumerable _
    Join caracteristicas In DataTableCaracteristicas On carreteras.Field(Of Integer)("IDCarreteraTipo") Equals _
    caracteristicas.Field(Of Integer)("IDCarreteraTipo") _ Select New With _ {.ID = carretera.Field(Of Integer)("IDCarretera"), _ .Nombre = roads.Field(Of String)("NombreCarretera"), _ .Estado= characteristics.Field(Of String)("Estado") _ } Dim col1 As New DataColumn("ID", GetType(Integer)) Dim col2 As New DataColumn("Nombre", GetType(String)) Dim col3 As New DataColumn("Estado", GetType(String)) Dim tableResultJoin As New DataTable("Resultado") tableResultJoin.Columns.Add(col1) tableResultJoin.Columns.Add(col2) tableResultJoin.Columns.Add(col3) For Each item In result tableResultJoin.Rows.Add(item.ID, item.Nombre, item.Estado) Next ds.Tables.Add(tableResultJoin) dgvResult.DataSource = ds.Tables("Resultado") End Sub Public Function PoblarDataSet() As DataSet Dim ds As New DataSet Dim tb1 As New DataTable("Tabla_Carreteras") Dim tb2 As New DataTable("Tabla_Caracteristicas") Dim tb1Col1 As New DataColumn("IDCarretera", GetType(Integer)) Dim tb1Col2 As New DataColumn("NombreCarretera", GetType(String)) Dim tb1Col3 As New DataColumn("IDCarreteraTipo", GetType(Integer)) tb1.Columns.Add(tb1Col1) tb1.Columns.Add(tb1Col2) tb1.Columns.Add(tb1Col3) Dim tb1row1 As DataRow tb1row1 = tb1.NewRow() tb1row1("IDCarretera") = 1 tb1row1("NombreCarretera") = "Carretera 1" tb1row1("IDCarreteraTipo") = 1 Dim tb1row2 As DataRow = tb1.NewRow() tb1row2 = tb1.NewRow() tb1row2("IDCarretera") = 2 tb1row2("NombreCarretera") = "Carretera 2" tb1row2("IDCarreteraTipo") = 0 Dim tb1row3 As DataRow = tb1.NewRow() tb1row3 = tb1.NewRow() tb1row3("IDCarretera") = 3 tb1row3("NombreCarretera") = "Carretera 3" tb1row3("IDCarreteraTipo") = 0 Dim tb1row4 As DataRow = tb1.NewRow() tb1row4 = tb1.NewRow() tb1row4("IDCarretera") = 4 tb1row4("NombreCarretera") = "Carretera 4" tb1row4("IDCarreteraTipo") = 1 tb1.Rows.Add(tb1row1) tb1.Rows.Add(tb1row2) tb1.Rows.Add(tb1row3) tb1.Rows.Add(tb1row4) Dim tb2Col1 As New DataColumn("IDCarreteraTipo", GetType(Integer)) Dim tb2Col2 As New DataColumn("Estado", GetType(String))
    tb2.Columns.Add(tb2Col1) tb2.Columns.Add(tb2Col2) Dim tb2row1 As DataRow tb2row1 = tb2.NewRow() tb2row1("IDCarreteraTipo") = 0 tb2row1("Estado") = "Pavimentada" Dim tb2row2 As DataRow = tb1.NewRow() tb2row2 = tb2.NewRow() tb2row2("IDCarreteraTipo") = 1
    tb2row2("Estado") = "No Pavimentada"
    tb2.Rows.Add(tb2row1) tb2.Rows.Add(tb2row2) ds.Tables.Add(tb1) ds.Tables.Add(tb2) Return ds End Function End Class

    Saludos.
    Francisco J.
    • Editado GSNet miércoles, 12 de agosto de 2009 22:53
    miércoles, 12 de agosto de 2009 22:49