如何正确使用列表作为Npgsql和Dapper的参数
问题描述:
我无法弄清楚如何在查询中使用List<Guid>
作为参数。在不同的情况下,我遇到过一段时间的麻烦,但现在是这样。我试图通过删除测试用户创建的所有内容来清理测试。下面的代码:如何正确使用列表作为Npgsql和Dapper的参数
var idList = new List<Guid>() { SYS_ADMIN_GUID, OPERATOR_GUID, OPERATOR_ELECTRONICS_TECH_GUID, UNIT_MANAGER_GUID, AREA_MANAGER_GUID };
using (NpgsqlConnection c = new NpgsqlConnection(TestHelper.ConnectionString))
{
c.Open();
c.Execute(@"delete from ""BlueStakes"".""MarkRequestStatuses"" where ""CreatedById"" in :idList", new { idList });
}
我还试图用@idList
作为没有任何工作参数。这是它给了错误:
Npgsql.PostgresException: Npgsql.PostgresException: 42601: syntax error at or near "$1"
显然,查询是不承认的列表,并在坚守它的参数,但我想不出为什么。
答
您不能在PostgreSQL中使用带有列表的IN
。要检查列表中是否存在元素,请使用以下语法:WHERE "CreatedById" = ANY (:idList)
。
以下是您对未来资源所说的文档:https://www.postgresql.org/docs/current/static/functions-comparisons.html – GBreen12