Dim tbl1 As New DataTable() Dim tbl2 As New DataTable() With tbl1.Columns .Add("ID", GetType(Integer)) .Add("Name", GetType(String)) .Add("CID", GetType(Integer)) End With With tbl2.Columns .Add("ID", GetType(Integer)) .Add("Name", GetType(String)) End With tbl1.Rows.Add(1, "Name1", 1) tbl1.Rows.Add(2, "Name2", 2) tbl1.Rows.Add(3, "Name3", 1) tbl1.Rows.Add(4, "Name4", 2) tbl1.AcceptChanges() tbl2.Rows.Add(1, "CName1") tbl2.Rows.Add(2, "CName2") tbl2.AcceptChanges() Dim q1 = (From r1 In tbl1.AsEnumerable Select id = CInt(r1("ID")), Name = CStr(r1("name")), CID = CInt(r1("cid"))) Dim q2 = (From r2 In tbl2.AsEnumerable Select id = CInt(r2("ID")), CName = CStr(r2("name"))) Dim q = (From a In q1 Join b In q2 On a.CID Equals b.id Where Function() Dim ret = a.id < 3 ret = ret AndAlso b.id = 1 Return ret End Function()) For Each itm In q Console.WriteLine($"{itm.a.id} {itm.a.Name} {itm.b.CName}") Next