What causes "extension methods cannot be dynamically dispatched" here?

Solution 1:

So, can somebody please help me understand why leveraging the same overload inside of those other methods is failing with that error?

Precisely because you're using a dynamic value (param) as one of the arguments. That means it will use dynamic dispatch... but dynamic dispatch isn't supported for extension methods.

The solution is simple though: just call the static method directly:

return SqlMapper.Query(_connection, sql, param, transaction,
                       buffered, commandTimeout, commandType);

(That's assuming you really need param to be of type dynamic, of course... as noted in comments, you may well be fine to just change it to object.)

Solution 2:

Another solution to the same issue is to apply type casting to the dynamic value.

I encountered the same compile error with:

Url.Asset( "path/" + article.logo );

Which was resolved by doing:

Url.Asset( "path/" + (string) article.logo );

Note: the dynamic value is well-known to be a string, in this case; a fact reinforced by the string concatenation that is present.