由于某些参数绑定错误,我开始在查询中使用'ANY()'函数而不是'IN'。目前它就是这样的。
Select *
FROM geo_closure_leaf
WHERE geoId = ANY(:geoIds)
但它对性能产生巨大影响。使用IN查询比使用ANY快得多。
任何建议如何绑定数组的字符串参数都可以在'IN'表达式中传递。
我试过临时修复使用
Select *
FROM geo_closure_leaf
WHERE geoId IN (''('' || array_to_string(:geoIds::text[] ,''),('') || '')'')
Select *
FROM geo_closure_leaf
WHERE geoId IN (select unnest(:geoIds::text[]))
geoIds
=字符串数组
它正在以这种方式工作。
**public override T Query<T>(string query, IDictionary<string, object> parameters, Func<IDataReader, T> mapper)**
{
T Do(NpgsqlCommand command)
{
IDataReader reader = null;
try
{
** command.CommandText = query;
reader = command.AddParameters(parameters).ExecuteReader();**
return mapper(reader);
}
finally
{
CloseDataReader(reader);
}
}
return Execute(Do);
}
对象是字符串数组。
预计是:我应该能够做到这一点而无需在sql中添加额外的逻辑。
Select *
FROM geo_closure_leaf
WHERE geoId IN (:geoIds)