【发布时间】:2016-11-06 09:54:14
【问题描述】:
以下查询总是产生错误 "42601: syntax error at or near "$1" ”。
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 是否可以使用对象参数处理这个问题?
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 字符串以字符串插值符号开头,但没有发生字符串插值。您的代码中似乎还缺少其他内容;也许是字符串插值?
-
您好 - 这是因为我已经开始使用下面的 ToInSql() 方法并且只是撤消了一些事情。正如您在更新的帖子中看到的那样,我已正确还原它。谢谢
标签: c# .net postgresql dapper