В следующем запросе всегда возникает ошибка «42601: ошибка синтаксиса при или около« $ 1 » ».Dapper.net «где ... in» запрос не работает с PostgreSQL
connection.Query<CarStatsProjection>(
@"select manufacturer, model, year, AVG(price) as averageprice, AVG(miles) as averagemiles, COUNT(*) as count
from products
where manufacturer IN @manufacturers
AND model IN @models
AND year IN @years
group by manufacturer, model, year",
new { manufacturers = new[] { "BMW", "AUDI" },
models = new[] { "M4", "A3" },
years = new[] { 2016, 2015 } });
У меня есть это, создав метод ниже и назвав его встроенным, чтобы построить SQL-запрос на данный момент. Хотел бы знать, может ли Dapper справиться с этим с помощью параметра param?
public static string ToInSql(this IEnumerable<object> values)
{
var flattened = values.Select(x => $"'{x}'");
var flatString = string.Join(", ", flattened);
return $"({flatString})";
}
Вы уверены, что это код, вызывающий ошибку? Строка SQL имеет два параметра (производители и модели), но есть три параметра, которые передаются Dapper (производители, модели и годы); но, Dapper будет игнорировать неиспользуемый параметр, так что это не проблема. Правильно также используется соглашение IN и соглашения Dapper. Строка SQL предваряется символом интерполяции String, но не встречается интерполяция строк. В вашем коде есть что-то еще, что, кажется, отсутствует в вашем сообщении; возможно, интерполяция строк? –
Привет, это произошло потому, что я уже начал использовать метод ToInSql() ниже и просто расстегнул несколько вещей. Я вернул его правильно, как вы можете видеть в обновленном сообщении. Thanks – sjdweb