Dapper - comment travailler avec des objets dynamiques

c# dapper dynamic

Question

J'utilise Dapper pour interroger à partir de SQL et avoir une requête dynamique en tant que telle:

var returns = conn.Query(dynamicQuery);

Lorsque je passe ensuite en revue les résultats, j'aimerais savoir quel est le type de date que je traite. J'ai donc essayé de faire ce qui suit:

foreach (var result in results)
{
    MessageBox.Show(result.GetType().ToString());
}

Mais il échoue toujours sur le MessageBox avec l'erreur Cannot perform runtime binding on a null reference .

Si je l'utilise plutôt:

var returns = conn.Query<object>(dynamicQuery);

Ensuite, la commande fonctionne, mais cela me donne un type d'objet Dapper.SqlMapper+DapperRow .

Comment trouver le type d'une variable dynamic ?

Réponse acceptée

Avec l'API dynamique, il est prévu que vous connaissiez la forme en termes de colonnes, c.-à-d.

foreach(dynamic row in query) {
    int id = row.Id;
    //...
}

Cependant, chaque ligne implémente également IDictionary<string, object> si les choses sont moins claires: alors lancez-y.

Sinon, si (commentaires) vous savez qu'il existe une seule cellule de type date time:

var when = conn.Query<DateTime>(...).Single();



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