Est-il possible d'accéder aux colonnes d'un Dapper FastExpando via une chaîne ou un index?

c# dapper dynamic

Question

Je tire un objet Dapper FastExpando et Dapper FastExpando veux pouvoir référencer les noms de colonne de manière dynamique au moment de l'exécution plutôt qu'au moment de la conception / de la compilation. Je veux donc pouvoir faire ce qui suit:

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

Je veux pouvoir faire ce qui suit:

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

Je comprends que je peux faire:

var Value = row.PropertyA;

mais je ne peux pas le faire car le nom de la propriété dont je vais avoir besoin ne sera pas connu avant l'exécution.

La réponse de cette question SO ne fonctionne pas. Je reçois toujours la même exception d' Target Invocation . Alors...

Est-il possible de faire ce que je veux faire avec un Dapper FastExpando?

Réponse acceptée

Bien sûr, il est en fait beaucoup plus facile que cela:

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

Réponse populaire

Concernant la partie du titre "ou index?" - J'avais besoin d'accéder aux résultats par index car les noms de colonnes renvoyés étaient parfois modifiés, vous pouvez donc utiliser une variante de la réponse de Sam Saffron comme ceci:

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");



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi