У вас неправильный формат данных inClause для замены заполнителя.Я выясняю способ использования RawSQL с предложением IN с помощью RawSqlString
.
List<string> list = new List<string>()
{
"Apple",
"Banana",
"Cream"
};
StringBuilder sb = new StringBuilder();
list.ForEach((item) =>
{
sb.Append("'");
sb.Append(item);
sb.Append("'");
sb.Append(",");
});
sb.Remove(sb.Length - 1, 1);//{'Apple','Banana','Cream'}
RawSqlString raw = new RawSqlString($"select * from Customer where Name in ({sb.ToString()})");
var result = _context.Customers.FromSql(raw).ToList();
Обновление:
У него всегда будет предупреждение, если вы хотите передать список строк вIN
.
Выражение SQL, переданное FromSql, встраивает данные, которые не будут параметризованы.Обзор потенциальной уязвимости внедрения SQL
Обходной путь использует Or
вместо IN
List<string> list = new List<string>()
{
"Apple",
"Banana",
"Cream"
};
StringBuilder sb = new StringBuilder();
sb.Append("select * from Customer where ");
list.ForEach((item) =>
{
sb.Append("Name='");
sb.Append(item);
sb.Append("' Or ");
});
sb.Remove(sb.Length - 4, 4);
RawSqlString sql= new RawSqlString(sb.ToString());
var result = _context.Customers.FromSql(sql).ToList();