Ho trovato il modo di restituire ciò che volevo, come volevo!!
So perfettamente che ho aggirato il problema e che non è il massimo ma non potevo fare altrimenti visto che non vi era altro modo.

Allora: dato che i dati contenuti all'interno di una query sono memorizzati sotto forma di lista, ho creato la mia funzione come una datatable, ho fatto la mia query e poi gli ho passato i campi uno per uno, restituendo al chiamante una datatable ovviamente.
Ossia:

Public Function X(...) As DataTable
Try
Using connection As New "Modello"

Dim query = From ...
Where ...
Select 1, 2, 3, 4

Dim dt_ As New DataTable
Dim colonne As New DataColumn
dt_.Columns.Add("a")
dt_.Columns.Add("b")
dt_.Columns.Add("c")
dt_.Columns.Add("d")
dt_.Columns.Add("e")

For Each campi In query
dt_.Rows.Add(campi.1, campi.2, campi.3, campi.4)
Next
Return dt_
End Using
Catch ex As Exception
MessageBox.Show(ex.Message, "Errore", MessageBoxButtons.OK, MessageBoxIcon.Error)
Return Nothing
End Try
End Function