Dapper Multiple Results De una sola consulta

c# dapper sql-server

Pregunta

Hola, estoy tratando de entender a Dapper.

Mi situación es que quiero extraer dos valores de una consulta en dos cadenas separadas. No estoy seguro si estoy haciendo esto de la manera correcta, pero esto es lo que estoy haciendo:

string sql = @"Select type, name 
              FROM ZipData 
              WHERE Zip = @zip";

using (var multi = conn.QueryMultiple(sql, new { zip = zip }))
{
   string result = multi.Read<string>().SingleOrDefault();         
}

Y obtengo No puedo acceder a un objeto eliminado. Nombre del objeto: 'GridReader'. cuando trato de leer la segunda cuerda. Lo que pasa es que obtiene el primer valor correctamente y tiene ambos campos en el lector que estoy tratando de obtener. Estoy seguro de que estoy abusando de la API.

¿Qué estoy haciendo mal aquí? He buscado en Google pero puedo encontrar un ejemplo específico.

Respuesta aceptada

Estás mal utilizando QueryMultiple . Eso se define para las declaraciones SQL compuestas que devuelven múltiples conjuntos de resultados. Algo como:

SELECT Foo FROM MyTable;
SELECT Bar FROM MyOtherTable;

Por otro lado, intenta obtener dos columnas diferentes a partir de un único conjunto de resultados, por lo que debe utilizar el método de Query normal:

var result = conn.Query(sql, new { zip = zip }).Single();
var type = result.type;
var name = result.name;

Query devuelve un enumerable (porque generalmente una consulta puede devolver varias filas). Sin embargo, parece que solo quieres una fila, por lo que invocamos. .Single al final para obtener esa fila. A partir de ahí, el tipo de devolución es dynamic por lo que puede consultar las propiedades implícitas en las columnas de su instrucción SELECT : type y name .



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