Dapperクエリの引数を動的に作成する方法

.net c# dapper

質問

私は値の辞書を持っています例えば "名前": "アレックス"

これをクエリの引数として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);

args代わりにdbArgsを渡しdbArgs

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

代わりに、 IDynamicParametersを実装する独自のクラスを記述することもできます。

オブジェクトから開始する場合(通常の方法であるdapper)、 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));

または、完全に動的になるように、次のようなモデルを作成し、モデル、クエリ、およびクエリパラメータのセットを取得できます。

    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)


ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow