[Dapper].NET/C#中使用Dapper如何动态创建查询参数?

.NET 作者: Rector 243阅读 0评论 0收藏 收藏本文

郑重申明:本文未经许可,禁止任何形式转载

[Dapper].NET/C#中使用Dapper如何动态创建查询参数?

问题描述

比如,当前有一个数据字典,可能包含的键值对有:{Name:’Jack’},这个数据字典是否可以作为Dapper的查询参数呢?
以下伪代码在Dapper中又如何实现呢?

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

方案一

可以使用 DapperDynamicParameters 类型,如:

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

在Dapper的查询中,使用 dbArgs替换成具体的查询参数即可,如:

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

此外,你也可以实现自己的动态查询参数类,只需要实现 IDynamicParameters 这个接口即可。

方案二

将数据字典作为 DynamicParameters的参数,完整示例代码如下:

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));

如果你需要让这种动态查询泛化,也可以创建一个泛型方法,如:

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)

阅读了该文章的人还浏览了...

本文永久链接图享网 » [Dapper].NET/C#中使用Dapper如何动态创建查询参数?

发布于: 2018-01-22 10:06:39
分享扩散:

文章评论

获取验证码