Comment mapper à un objet Dictionary à partir des résultats de la base de données en utilisant Dapper Dot Net?

asp.net c# dapper

Question

Si j'ai une requête simple telle que:

string sql = "SELECT UniqueString, ID  FROM Table";

et je veux l'associer à un objet de dictionnaire tel que:

Dictionary<string, int> myDictionary = new Dictionary<string, int>();      

Comment pourrais-je faire cela avec Dapper?

Je suppose que c'est quelque chose comme:

myDictionary = conn.Query<string, int>(sql, new {  }).ToDictionary();

Mais ne peut pas comprendre la syntaxe appropriée.

Réponse acceptée

Il y a plusieurs manières déjà montrées; Personnellement, je voudrais juste utiliser l'API non générique:

var dict = conn.Query(sql, args).ToDictionary(
    row => (string)row.UniqueString,
    row => (int)row.Id);

Réponse populaire

Fonctionne également sans classe supplémentaire:

var myDictionary = conn.Query<string, int, KeyValuePair<string,int>>(sql, (s,i) => new KeyValuePair<string, int>(s,i))
    .ToDictionary(kv => kv.Key, kv => kv.Value);

REMARQUE : Lorsque vous utilisez la version Dapper.NET 3.5, la méthode Query qui utilise les types premier, second et return requiert que vous spécifiiez davantage de paramètres, car les versions .NET 4.0 et .NET 4.5 tirent parti des arguments facultatifs .

Dans ce cas, le code suivant devrait fonctionner:

string splitOn = "TheNameOfTheValueColumn";
var myDictionary = conn.Query<string, int, KeyValuePair<string,int>>(sql, (s,i) => new KeyValuePair<string, int>(s,i), null, null, false, splitOn, null, null)
        .ToDictionary(kv => kv.Key, kv => kv.Value);

La plupart des arguments reviendront à la valeur par défaut, mais splitOn est requis, car autrement, la valeur par défaut sera "id".

Pour une requête qui renvoie deux colonnes, « ID » et « Description », splitOn doit être défini sur « Description ».




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