Leer los nombres de columna basados ​​en el índice de una variable dinámica

.net c# dapper dynamic

Pregunta

Tengo un sproc que devuelve un número variable de columnas con diferentes nombres de columna en función del parámetro de entrada que se le haya asignado. (y también número de filas> = 1)

Por ejemplo, si la entrada es 3, sproc devuelve 3 columnas, y si la entrada es 5, devuelve 5. (No estoy seguro sobre el parámetro de entrada que podría darse)

Estoy usando dapper para integrar mi sproc en la aplicación C # y estoy usando dynamic como tipo de retorno para la siguiente.

dynamic returnValue = connection.Query<dynamic>("sproc and inputs")

¿Puede alguien guiarme sobre cómo leer las columnas de la variable dinámica?

Utilizando returnValue[0].col1, returnValue[0].col2 funciona pero no estoy seguro del número de columnas para consultar.

¿Hay alguna forma de leer columnas como returnValue[0]["c1"] o de una forma más sencilla para que pueda recorrer todas las columnas en función del parámetro de entrada?

Respuesta aceptada

El resultado de llamar a connection.Query() se puede convertir a un IEnumerable<IDictionary<string, object>> que le permitirá iterar los resultados o acceder a ellos utilizando una clave de nombre de índice y columna. Por ejemplo:

IEnumerable<IDictionary<string, object>> results;

string sql = @"select 'a' as col1, 'b' as col2, 'c' as col3, 'd' as col4
               union
               select 'w' as col1, 'x' as col2, 'y' as col3, 'z' as col4";

using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();

    results = connection.Query(sql) as IEnumerable<IDictionary<string, object>>;
}

//we need to use ElementAt as we have an Enumerable but we could ToList it if required
Console.WriteLine(results.ElementAt(0)["col1"]);

//we can iterate the rows
foreach (var row in results)
{
    //then iterate the columns and get a KeyValuePair for each column
    foreach (var col in row)
    {
        Console.WriteLine("{0} {1}", col.Key, col.Value);
    }
}

Que impresiones:

un
col1 a
col2 b
col3 c
col4 d
col1 w
col2 x
col3 y
col4 z



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué