sqlparameter c# подстановка параметра в IN()
Есть такой код, он не работает, не приносит данные:
var strT = "'a','b','c'";
var selA = db.test.SqlQuery(@"SELECT *
FROM tblTemp t
WHERE t.mit IN(@strT)",
new SqlParameter("@strT", strT)).ToList();
причем так:
var strT = "'a','b','c'";
var selA = db.test.SqlQuery(@"SELECT *
FROM tblTemp t
WHERE t.mit IN("+strT+")").ToList();
да работает и приносит данные
Подскажите, пожалуйста, в чем проблема?
Дополнение к вопросам на мой вопрос.
Я использую EntityFramework.
Подскажите пример использования SqlParameter в EntityFramework с использованием оператора IN() с заранее не известным количеством параметров внутри IN.
Ответы (1 шт):
Вы работаете с Entity Framework. Так почему бы не использовать его встроенные средства:
var values = new string[3] { "a", "b", "c" };
var result = db.test.Where(t => values.Contains(t.mit));
Это запрос сгенерирует sql содержащий клаузу in.
Учтите, что тип массива должен совпадать с типом mit.
Вот пример использования сырого sql:
var values = new string[] { "a", "b", "c" };
var parameters = string.Join(", ", values.Select((_, i) => "@p" + i));
var sql = "SELECT * FROM tblTemp WHERE mit IN(" + parameters + ")";
var result = db.test.SqlQuery(sql, values);
Однако, непонятно, почему вы вызываете его на таблице test, а в запросе фигурирует tblTemp. Маппинг сделан? Или это очередная ошибка?