Dapper: leyendo en el diccionario del lector

c# dapper

Pregunta

mi lector lee el contenido del procedimiento almacenado que tiene una de sus primeras declaraciones de selección como

 select id , name from FSubsystem

de 10 staments seleccionados

y declare el diccionario como a continuación Dictionary SubsystemMApping = new Dictionary ();

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

Necesito leer los primeros valores de declaración de selección en el diccionario SubsystemMApping. id - a Clave y nombre - a valor

Intenté hacerlo usando reader.Read.Todictionary () pero no pude tener éxito. No estoy muy familiarizado con Func & Action. es la razón por la que creo que no puedo entender las 2 sobrecargas de Todictionary correctamente.

Alguien puede ayudar ?

Respuesta aceptada

Imagine que tiene un POCO que le devuelve. Algo como

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

Ahora imagina que tienes un IEnumerable<Item> y la colección está poblada (esto es más probable que sea lo que Dapper está devolviendo)

Para usar el método ToDictionary , tienes 2 sobrecargas importantes.

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

Esto devuelve un Dictionary<int,Item> la clave para el diccionario es cada item.Id . Propiedad item.Id .

La sobrecarga clave / valor:

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

Esta sobrecarga crea un Dictionary<int,string> usando el item.Id especificado. item.Id para key y item.Name para value.

Hay 2 sobrecargas más que le permiten pasar un comparador personalizado para usar al determinar las claves.


Respuesta experta

Para la API genérica, Stan ya lo ha descrito. La API leída no genérica significa que también puede eludir el POCO a través de la dinámica:

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

Básicamente, a través de "dinámico" vuelve a exponer las columnas como propiedades virtuales.



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