簡體   English   中英

Dapper.net“where ... in”查詢不適用於PostgreSQL

[英]Dapper.net “where … in” query doesn't work with PostgreSQL

以下查詢始終生成錯誤“42601:語法錯誤在或接近”$ 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})";
    }

PostgreSQL IN運算符不支持數組(或任何其他集合)作為參數,只支持普通列表(使用ToInSql方法生成的ToInSql ),對於PostgreSQL,您需要使用ANY運算符,如下所示:

SELECT manufacturer, model, year, AVG(price) as averageprice, AVG(miles) as averagemiles, COUNT(*) as count
FROM products
WHERE manufacturer = ANY(@manufacturers)
AND model = ANY(@models)
AND year = ANY(@years)
GROUP BY manufacturer, model, year

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM