Я начал использовать функцию «ANY ()» в запросе вместо «IN» из-за ошибки, связанной с каким-либо параметром. В настоящее время это что-то подобное.
Select *
FROM geo_closure_leaf
WHERE geoId = ANY(:geoIds)
Но это оказывает огромное влияние на производительность. Использование запроса с IN намного быстрее, чем с ЛЮБЫМ.
Любое предложение, как мы можем связать массив строковых параметров, может быть передано в выражении '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)