Подтвердить что ты не робот

Dapper AddDynamicParams для оператора IN с именем динамического имени

У меня простая строка SQL такая:

"SELECT * FROM Office WHERE OfficeId IN @Ids"

Дело в том, что имя @Ids вводится в редакторе, так что это может быть что угодно, и моя проблема в том, что если я хочу пройти, скажем, массив целых чисел, он работает только с Dapper, если я использую:

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

Но для этого требуется, чтобы я знал, что имя параметра - "Идентификаторы", и это не так в моем сценарии.

Я могу установить "динамический параметр" в Dapper с таким "динамическим" именем:

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

Но тогда Dapper не строит "IN (....)" SQL с отдельными параметрами для каждого значения.

Есть ли способ построить динамический объект, переданный в "AddDynamicParams", но задав имя и значение члена, не зная имя заранее?

Я мог бы изменить источник Dapper для работы над моим сценарием, но если кто-нибудь знает более простое и изящное решение этого, я был бы увлекателен!

С уважением Jens

4b9b3361

Ответ 1

Я только что отправил исправление в репозиторий, который позволяет любому из следующих действий работать правильно:

по объекту (это работало ранее):

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

или одним именем:

values.Add("ids", list);

или, в качестве словаря:

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

Я еще не развернулся в NuGet. Дайте мне знать, если это проблема.