Pues yo manejo algo así:
Código c#:
Ver originalList<object[]> retorno = null;
object[] tmp;
try
{
conexion.Open();
SqlDataReader lector = comando.ExecuteReader();//trae tu comando
if (lector.HasRows)
{
retorno = new List<object[]>();
while (lector.Read())
{
tmp = new object[lector.FieldCount];//coloco mi arreglo con los n números de campo obtenidos
lector.GetValues(tmp);
retorno.Add(tmp);
}
}
else
{
tmp = null;
}
}
catch
{
if (conexion != null)
conexion.Close();
}
lo que te hace este código es que lees una consulta de N filas por M columnas, cuando asignes a tu clase lo puedes buscar en esa lista:
retorno[0][0] = esto es el primer registro obtenido junto con su primer campo
retorno[0][1] = esto es el primer registro obtenido junto con su segundo campo
.
.
.
retorno[N][M] = esto es el registro N obtenido junto con su campo M
Espero eso te ayude.