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.