¿Hay alguna forma de acceder a las columnas en un Dapper FastExpando a través de una cadena o un índice?

c# dapper dynamic

Pregunta

Estoy extrayendo un objeto Dapper FastExpando y quiero poder hacer referencia dinámicamente a los nombres de las columnas en tiempo de ejecución en lugar de en tiempo de diseño / compilación. Entonces quiero poder hacer lo siguiente:

var testdata = conn.Query("select * from Ride Where RiderNum = 21457");

Quiero ser capaz de hacer lo siguiente:

foreach( var row in testdata) {
    var Value = row["PropertyA"];
}

Entiendo que puedo hacer:

var Value = row.PropertyA;

pero no puedo hacer eso, ya que el nombre de la propiedad que voy a necesitar no se conocerá hasta el tiempo de ejecución.

La respuesta de esta pregunta SO no funciona. Aún recibo la misma excepción de Target Invocation . Asi que...

¿Hay alguna manera de hacer lo que quiero hacer con un Dapper FastExpando?

Respuesta aceptada

Claro, en realidad es mucho más fácil que eso:

var sql = "select 1 A, 'two' B";
var row = (IDictionary<string, object>)connection.Query(sql).First();
row["A"].IsEqualTo(1);
row["B"].IsEqualTo("two");

Respuesta popular

En cuanto a la parte del título "o índice?" - Necesitaba acceder a los resultados por índice ya que los nombres de las columnas que se devolvían cambian a veces, por lo que puedes usar una variación de la respuesta de Sam Saffron como esta:

var sql = "select 1, 'two'";
var row = (IDictionary<string, object>)connection.Query(sql).First();
row.Values.ElementAt(0).IsEqualTo(1);
row.Values.ElementAt(1).IsEqualTo("two");


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