如何在 Dapper Query 中的动态参数中传递多个条件,就像我们传递 IN 运算符

问题描述

我想在查询我的 Postgresql 数据库时传递多个实体代码。我收到以下代码错误: 我希望查询的工作方式如下:

        SELECT * FROM public.test WHERE entity_code IN('value1','value2');

下面是我的代码,它可以在我传递单个值的情况下工作:

        string query = "SELECT * FROM public.test WHERE entity_code = @Entity_Code";

        Dictionary<string,object> dictionary = new Dictionary<string,object>();
        dictionary.Add("@Entity_Code","value1");

        var connection = _postgresqlContext.Database.GetDbConnection();
        var results = connection.Query<Test>(query,new DynamicParameters(dictionary));

以下是在针对同一参数添加多个值的情况下不起作用的代码

    string query = "SELECT * FROM public.test WHERE entity_code IN @Entity_Code";

    Dictionary<string,object>();
    dictionary.Add("@Entity_Code",new string[]{ "value1","value2" });

    var connection = _postgresqlContext.Database.GetDbConnection();
    var results = connection.Query<Test>(query,new DynamicParameters(dictionary));

解决方法

Postgres 的 IN 语法略有不同。您应该使用 ANY

string query = "SELECT * FROM public.test WHERE entity_code = ANY(@Entity_Code)";

var dictionary = new Dictionary<string,object>();
dictionary.Add("@Entity_Code",new string[]{ "value1","value2" });

var connection = _postgreSqlContext.Database.GetDbConnection();
var results = connection.Query<Test>(query,new DynamicParameters(dictionary));

查看此问题的答案:IN vs ANY operator in PostgreSQL