Dapper: lire dans le dictionnaire de readrer

c# dapper

Question

mon lecteur lit le contenu de la procédure stockée qui a une de ses 1ère instruction select comme

 select id , name from FSubsystem

sur 10 articles sélectionnés

et j'ai déclaré le dictionnaire comme ci-dessous Dictionary SubsystemMApping = new Dictionary ();

var reader = connection.QueryMultiple(...);

Je dois lire les premières valeurs de l'instruction select dans SubsystemMApping du dictionnaire. id - à la clé et nom - à la valeur

J'ai essayé de le faire en utilisant reader.Read.Todictionary () mais je n'ai pas réussi. Je ne suis pas très familier avec Func & Action. dats la raison pour laquelle je pense que je ne suis pas capable de comprendre les 2 surcharges de Todictionary correctement.

Quelqu'un peut-il aider?

Réponse acceptée

Imaginez que vous avez un POCO qui vous est retourné. Quelque chose comme

public class Item 
{
   public int Id { get; set;}
   public string Name { get; set;}
}

Maintenant, imaginez que vous avez un IEnumerable<Item> et que la collection est remplie (c'est probablement ce que Dapper retourne)

Pour utiliser la méthode ToDictionary , vous avez 2 surcharges importantes.

var dictionary = itemList.ToDictionary( item => item.Id );

Cela retourne un Dictionary<int,Item> la clé du dictionnaire est chaque propriété item.Id

La surcharge clé / valeur:

var dictionary = itemList.ToDictionary( item => item.Id , item => item.Name );

Cette surcharge crée un Dictionary<int,string> utilisant la valeur item.Id spécifiée pour la clé et item.Name .

Deux surcharges supplémentaires vous permettent de passer un comparateur personnalisé à utiliser lors de la détermination des clés.


Réponse d'expert

Pour l'API générique, Stan l'a déjà décrite. L'API de lecture non générique signifie que vous pouvez également contourner le POCO via dynamique:

var lookup = reader.Read().ToDictionary(x => (int)x.id, x => (string)x.name);

Fondamentalement, via "dynamique", les colonnes sont présentées comme des propriétés virtuelles.




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