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
Ответы
Ответ 1
Я только что отправил исправление в репозиторий, который позволяет любому из следующих действий работать правильно:
по объекту (это работало ранее):
values.AddDynamicParams(new { ids = list });
или одним именем:
values.Add("ids", list);
или, в качестве словаря:
var args = new Dictionary<string, object>();
args.Add("ids", list);
values.AddDynamicParams(args);
Я еще не развернулся в NuGet. Дайте мне знать, если это проблема.