Obtener valores de propiedad desde dinámicos

.net-4.5 dapper oracle11g

Pregunta

Yo uso Dapper con dinámica porque la tabla que se debe consultar no se conoce hasta el tiempo de ejecución, por lo que las clases POCO no son posibles.

Estoy devolviendo los resultados de Dapper a través de WebAPI. Para ahorrar ancho de banda, necesito devolver solo los valores de Dapper, no los nombres de las propiedades, por ejemplo:

{
    7,"2013-10-01T00:00:00",0,"AC",null,"ABC","SOMESTAGE"
},...

Y no:

{
TID: 7,
CHANGE_DT: "2013-10-01T00:00:00",
EFFECTIVE_APPTRANS: 0,
EFFECTIVE_APPTRANS_STATUS: "AC",
DEVICE: null,
PROCESS: "ABC",
STAGE: "SOMESTAGE"
},...

Tengo problemas para encontrar una forma razonable de hacerlo. Intenté abusar de la función de mapeo de Dapper:

var tableData = Database.Query<dynamic, dynamic, dynamic>(connectInfo, someResource.sql,
    (x, y) =>
    {
        List<object> l = new List<object>();
        object o = x;

        foreach(var propertyName in o.GetType().GetProperties().Select(p => p.Name)) {
            object value = o.GetType().GetProperty(propertyName).GetValue(o, null);
            l.Add(value);
        }
        return l as dynamic;
    },
    new {implantId, pendingApptrans},
    splitOn: "the_last_column");

También intenté que Dapper devolviera una lista con el mismo código base.

La idea era extraer valores de propiedad dentro de la función de mapa porque me permite jugar con filas antes de que se devuelva algo, pero obtengo resultados vacíos sin error:

[
    [ ], [ ], [ ], [ ], [ ], [ ], [ ]
]

Además, no conozco ningún nombre de columna para dividir, que la función de mapeo quiere. Sin embargo, incluso cuando ingreso el último nombre de columna de una consulta de prueba, los resultados son los mismos.

¿Cómo puedo devolver solo valores del valor de retorno dinámico de Dapper? ¿Debo recurrir al procesamiento posterior de la dinámica después de la llamada Dapper?

Respuesta aceptada

Para ese conjunto particular de requisitos, sí, necesitaría postprocesar; por ejemplo, puede convertir a DapperRow o IDictionary<string,object> . Alternativamente, podría usar la API IDataReader que ahora IDataReader expone.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow