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 шт):

Автор решения: Alexander Petrov

Вы работаете с 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. Маппинг сделан? Или это очередная ошибка?

→ Ссылка