Declare el resultado dinámico antes de usar la declaración con Dapper

c# dapper dynamic

Pregunta

Estoy usando Dapper para hacer una llamada a un procedimiento almacenado. Me gustaría utilizar el registro devuelto fuera de la instrucción using, pero no estoy seguro de cómo declarar la variable returnedData ya que es dinámica y depende de los resultados del procedimiento almacenado. Solo realizo esta llamada una vez, por lo que no tiene ningún sentido para mí crear un modelo que represente la colección devuelta por el procedimiento almacenado, y por eso quiero utilizarlo.

using (IDbConnection db = new SqlConnection(SqlDataAccess.LoadConnectionString("TestData")))
{
    var returnedData = db.Query<dynamic>("StoredProcedureName", 
                                new
                                {
                                    ClientId = myClientId,
                                    CompanyId = myCompanyId
                                }, 
                                commandType: CommandType.StoredProcedure).SingleOrDefault();
}

¿Cómo declarar la variable returnedData antes de la instrucción using para que el compilador esté contento?

Respuesta aceptada

Query<T> devuelve IEnumerable<T> , y SingleOrDefault produce una T partir de ella, por lo que returnedData se puede declarar como dynamic :

dynamic returnedData = null;
using (IDbConnection db = new SqlConnection(SqlDataAccess.LoadConnectionString("TestData")))
{
    returnedData = db.Query<dynamic>(
        "StoredProcedureName"
    ,   new {
            ClientId = myClientId
        ,   CompanyId = myCompanyId
        }
    ,   commandType: CommandType.StoredProcedure
    ).SingleOrDefault();
}
Console.WriteLine(
    "ClientId={0}, CompanyId={1}"
,   returnedData?.ClientId
,   returnedData?.CompanyId
);


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é