As Pgmer Says you can carry out joins in your SQL query which would probably be the quickest and least memory intensive option.
OR
if in this instance you can not, you can go through one table and use the Select method on the other table i.e. DataTable.Select("My search criteria") this will give a collection of datarows in the table that match the criteria
for example:
Dim DT1, DT2 as datatable
Dim CustID as Integer
dim CustOrders() As DataRow
DT1 = ds.Tables("Customer")
DT2 = ds.Tables("Orders")
For Each DR as Datarow in DT1.Rows
CustID = DR("CustomerID")
CustOrders = DT2.SELECT("CustomerID = " &CustID )
For Each Order AS datarow in CustOrders
'Do whatever
Next
Next
OR
Use a dataRelation object to Join the tables in the dataset then get the child rows of the parent table:
Dim parentColumn As DataColumn = _
DS.Tables("Customers").Columns("CustID")
Dim childColumn As DataColumn = DS.Tables( _
"Orders").Columns("CustID")
' Create DataRelation.
Dim relCustOrder As DataRelation
relCustOrder = New DataRelation( _
"CustomersOrders", parentColumn, childColumn)
' Add the relation to the DataSet.
DS.Relations.Add(relCustOrder)
Dim Orders() as DataRow
dim OrderNo as Integer
For Each Customer As Datarow in DS.Tables("Customers").Rows
Orders = Customer.GetChildRows(relCustOrder)
For i as integer = 0 to ubound(Orders)
OrderNo = Orders(i).Item("OrderNo")
Next
Next