如何dynamic地为Dapper查询创build参数
我有一个值的字典例如“名字”:“亚历克斯”
有没有办法将这个传递给Dapper作为查询的参数?
这是一个显示我想要做什么的例子。
IDictionary<string, string> args = GetArgsFromSomewhere(); string query = "select * from people where Name = @Name"; var stuff = connection.Query<ExtractionRecord>(query, args);
是:
var dbArgs = new DynamicParameters(); foreach(var pair in args) dbArgs.Add(pair.Key, pair.Value);
然后传递dbArgs
代替args
:
var stuff = connection.Query<ExtractionRecord>(query, dbArgs);
或者,您可以编写自己的实现IDynamicParameters
的类。
请注意,如果您是从一个对象(通常使用精简方法)开始的,那么您也可以将此模板与DynamicParameters
作为起点:
var dbArgs = new DynamicParameters(templateObject);
我知道这是一个古老的问题(像5岁那样),但是我正在为同样的事情而苦苦挣扎。 完整的答案是在对其他答案的评论中,但我想我会在这里提供一个完整的例子。
string query = "SELECT * FROM MyTableName WHERE Foo = @Foo AND Bar = @Bar"; Dictionary<string, object> dictionary = new Dictionary<string, object>(); dictionary.Add("@Foo", "foo"); dictionary.Add("@Bar", "bar"); var results = connection.Query<MyTableName>(query, new DynamicParameters(dictionary));
或者,为了完全dynamic化,可以创build一个像这样的方法,它将采用任何模型,任何查询以及任何一组查询参数:
public static IEnumerable<T> Get<T>(string query, Dictionary<string, object> dictionary) { IEnumerable<T> entities = connection.Query<T>(query, new DynamicParameters(dictionary)); return entities; }
然后调用这个方法:
var results = Get<MyTable>(query, dictionary)