"ダイナミック"パラメータ名を持つIN文のDapper AddDynamicParams

c# c#-4.0 dapper

質問

私はこのような単純な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のソースを自分のシナリオで使用するように変更することはできますが、誰かがこれに対するシンプルで洗練されたソリューションを知っていれば、私は素晴らしいことになります!

受け入れられた回答

私はリポジトリに以下のいずれかを正しく動作させる修正を提出しました:

オブジェクトごと(これは以前に動作しました):

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

または、単一の名前で:

values.Add("ids", list);

または、辞書として:

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

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



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