Вы не можете параметризовать это как один параметр. Ваш запрос выполняет "in" для single значения, поэтому по существу:
... Where personId = '1,2,3,4,5'
(дать или принять параметр). Это обычно также недопустимый или неоптимальный тест на равенство, и, конечно, это не то, что вы пытались запросить.
Опция;
- использовать сырую конкатенацию: часто сопряжена с риском внедрения SQL и допускает повторное использование плохого плана запросов
- на полном сервере SQL: используйте UDF для разделения одного параметра
- на полном сервере SQL, используйте TVP
- динамическое добавление параметров и добавление различных @ param3 и т. Д. В TSQL
Последний является наиболее надежным, и в «dapper-dot-net» есть встроенная функция, чтобы сделать это для вас (так как это обычно требуется):
int[] ids = ...
var rows = conn.Query<SomeType>(
@"... Where Id in @ids",
new { ids }).ToList();
Это, при запуске через dapper-dot-net, добавит параметр для каждого элемента в «идентификаторах», присвоит ему правильное значение и т. Д. И исправит SQL, чтобы он выполнялся, например:
"... Where Id in (@ids0, @ids1, @ids2)"
(если в "идентификаторах" было 3 элемента)