34

次のような単純な 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 });

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

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

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

4

1 に答える 1

33

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

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

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

または、単一の名前で:

values.Add("ids", list);

または、辞書として:

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

NuGet にはまだデプロイしていません。問題がある場合はお知らせください。

于 2012-10-04T09:31:52.303 に答える