2
以下查詢總是會在$ 1「 」處或附近產生錯誤「42601:語法錯誤」。Dapper.net「where ... 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是否可以用對象參數來處理這個問題?
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()方法,只是解開了一些東西。正如您在更新的帖子中看到的那樣,我已經正確地恢復了它。謝謝 – sjdweb