El problema que veo, es que, el retorno de datos tambien debería de ser dinamico :S, pero ya con la de @Novlucker me defiendo y al momento de usarla pues usar una conversión.
Teóricamente puedes definir que la función retorne el tipo
object. Posteriormente una vez obtenido el resultado, debes realizar un
cast al tipo que esperes.