Search code examples
c#dapper

Assigning values from dynamic List to model properties. Conversion Errors


New programmer having trouble assigning model property values from a stored procedure returning a dynamic list.

Error: cant implicitly convert.

and if I try using something like Convert.ToDouble(Resultlist[0]); that fails too.

The results list is returning expected values from the DB.

I am prrobably missing something very simple.

Model properties in this case are all doubles.

CODE:

public PricingOptionsModel GetPricing(PricingOptionsModel model)
{
    using (IDbConnection connection = new System.Data.SqlClient.SqlConnection(GlobalConfig.CnnString("Database")))
    {
        List<dynamic> Resultlist;
        Resultlist = connection.Query("dbo.GetCharges", commandType: CommandType.StoredProcedure).ToList();
        model.item1 = Resultlist[0];
        model.item2 = Resultlist[1];
        model.item3 = Resultlist[2];
        model.item4 = Resultlist[3];
        model.item5 = Resultlist[4];
        model.item6 = Resultlist[5];
        model.item7 = Resultlist[6];
        model.item8 = Resultlist[7];

    }
    return model;
}

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: 'Cannot implicitly convert type 'object' to 'double'. An explicit conversion exists (are you missing a cast?)'


Solution

  • In case of your stored procedure, it provides a single row with multiple columns. ResultList has 1 item of type object and it has multiple properties (item1, item2, ...).

    So you want to assign it like this: model.item1 = ResultList[0].item1;.

    If types returned from Dapper don't match, then you can also apply Convert there like this: model.Item1 = Convert.ToDouble(ResultList[0].item1;.