web-dev-qa-db-ja.com

「動的」パラメーター名を持つINステートメントのDapperAddDynamicParams

私はこのような単純なSQL文字列を持っています:

_"SELECT * FROM Office WHERE OfficeId IN @Ids"
_

重要なのは、@ Ids名がエディターに入力されるため、どのような名前でもかまいません。私の問題は、たとえば整数の配列を渡したい場合、次を使用した場合にのみDapperで機能することです。

_var values = new DynamicParameters();
values.AddDynamicParams(new { Ids = new[] { 100, 101 } });
_

しかし、これには、パラメーター名がIdsであることを知る必要がありますが、私のシナリオではそうではありません。

Dapperで「動的パラメータ」を次のような「動的」な名前で設定できます。

_var values = new DynamicParameters();
values.Add("Ids", new[] { 100, 101 });
_

ただし、Dapperは、値ごとに個別のパラメーターを使用してIN (....)SQLを構築しません。

AddDynamicParamsに渡される動的オブジェクトを作成する方法はありますが、事前に名前を知らなくてもメンバーの名前と値を設定できますか?

Dapperソースを自分のシナリオで機能するように変更することもできますが、これに対するよりシンプルでエレガントなソリューションを誰かが知っているなら、私は素晴らしいでしょう!

28
Jens Pettersson

次のいずれかが正しく機能するようにする修正をリポジトリに送信しました。

オブジェクト別(これは以前は機能していました):

values.AddDynamicParams(new { ids = list });

または、単一の名前で:

values.Add("ids", list);

または、辞書として:

var args = new Dictionary<string, object>();
args.Add("ids", list);
values.AddDynamicParams(args);

NuGetにはまだ展開していません。これが問題かどうか教えてください。

25
Marc Gravell