Search code examples
c#.netdapper

How to create arguments for a Dapper query dynamically


I have a dictionary of values Eg "Name": "Alex"

Is there a way to pass this to Dapper as arguments for a query?

Here is an example showing what I want to do.

IDictionary<string, string> args = GetArgsFromSomewhere();
string query = "select * from people where Name = @Name";
var stuff = connection.Query<ExtractionRecord>(query, args);

Solution

  • Yes:

    var dbArgs = new DynamicParameters();
    foreach(var pair in args) dbArgs.Add(pair.Key, pair.Value);
    

    Then pass dbArgs in place of args:

    var stuff = connection.Query<ExtractionRecord>(query, dbArgs);
    

    Alternatively, you can write your own class that implements IDynamicParameters.

    Note that if you are starting from an object (the usual approach with dapper), you can also use this template with DynamicParameters as a starting point:

    var dbArgs = new DynamicParameters(templateObject);