var filterOriginal = rows.Select(x => $"(container='{x["container"]}' AND docid={x["docid"]})");
var tableOriginal = await Sql.SelectTableAsync($@"SELECT hybrid
FROM dms_link
WHERE hybrid LIKE 'pers^%'
AND ({filterOriginal.StrCat(" or ")})");
V17 Conversion
PostgreSQL allows comparision of touples/pairs
// using IN
var filterComposed = rows.StrCat(",", x => $"('{x["container"].ToStringNN()}', {x["docid"].ToInt()})");
var tableComposed = await Sql.SelectTableAsync($@"SELECT hybrid
FROM dms_link
WHERE hybrid LIKE 'pers^%'
AND (container, docid) IN ({filterComposed})");
Simplifying to a single entry
var filter = "container = :container AND docid= :docid";
var table = await Sql.SelectTableAsync($@"SELECT hybrid
FROM dms_link
WHERE hybrid LIKE 'pers^%'
AND ({filter})", new { container = "2009", docid = 1 });
Wrong!
var filter = rows.Select(x => $"(container = '{x["container"]}' AND docid ={x["docid"]})");
var table = await Sql.SelectTableAsync(@"SELECT hybrid
FROM dms_link
WHERE hybrid LIKE 'pers^%'
AND (:filter) ", new { filter = filter.StrCat(" or ") });
Using an SQL statement as an argument within another SQL statement is incorrect and will cause errors.