Search code examples
c#sqldappersqlkata

How to get values from multiple columns as IEnumerable using SqlKata (Dapper)


I'm using SQL and I have a table shown below in my DB.

Id   Remark1    Remark2    Remark3    Remark4    
------------------------------------------------
1    AAA        BBB        CCC        DDD      
2    EEE        FFF        GGG        HHH   

How can I get all the values from Remark* columns as IEnumerable<string> using the following DTO?

class MyDTO
{
   public int ID { get; }
   public IEnumerable<string> Remarks { get; }
}

NOTE: I'm using SqlKata (Dapper), which you can also use when answering.


Solution

  • If you're using Dapper, maybe just use the non-generic Query API. This returns each row as dynamic, but this can also be cast to IDictionary<string,object>, which allows you to access each named column (for example, via foreach).

    foreach (IDictionary<string, object> row in conn.Query(sql, args))
    {
        var obj = new MyDto();
        var vals = new List<string>();
        obj.Remarks = list;
        foreach ((var key, var value) in row)
        {
            if (key == nameof(obj.Id))
                obj.Id = (int)value;
            else
                vals.Add((string)value);
        }
        // do something with obj
    }
    ```