У меня есть приложение Asp.Net с базой данных MySql. Для доступа к этой базе данных я использую набор данных (.xsd), где я поставил свои запросы в TableAdapters. Один из этих запросов есть пункт WHERE IN
, как:Как передать список значений в качестве параметра в привязке C#
SELECT somefield
FROM sometable
WHERE somefield IN (?)
Это somefield
является строкой. Функция TableAdapter ожидает, что параметр строки заменит параметр запроса. Однако я хотел бы передать List<string>
(или массив или любой другой тип) для проверки нескольких значений. Единственный способ я нашел до сих пор, чтобы преобразовать список в разделителями separeted списке:
GetData(string.Join(",", myList.ToArray());
Он отлично работает до тех пор, пока есть только одно значение в списке. С двумя значениями запрос возвращает 0 строк. Я активировал общий журнал в MySql и выяснил, что он связан с кавычками. Запрос, который достигает базы данных является:
SELECT somefield
FROM sometable
WHERE somefield IN ('foo,bar')
Я добавил дополнительные кавычки при соединении значения:
GetData(string.Join("','", myList.ToArray());
Но дополнительные кавычки получить только сбежавших и результат все еще 0 строк:
SELECT somefield
FROM sometable
WHERE somefield IN ('foo\',\'bar')
Прямо сейчас единственный вариант, который я вижу, - преобразование каждой отдельной строки в идентификатор и объединение этих целых чисел в строку. Как в this нить. Но это означает много дополнительных вызовов в базу данных, чтобы получить эти идентификаторы. Я действительно предпочитаю использовать строковые значения!
Кто знает, как решить эту загадку?
Почему вы не используете LINQ? – dursk
Краткий ответ: исторические причины с этим приложением. Более длинный ответ: вы начали думать, и я искал информацию о LINQ. Я обязательно взгляну на Entity Framework/LINQ в будущем! – Briqunullus