Olh*_*iuk 8 c# sql azure azure-cosmosdb
我想将数组作为参数传递给 SqlQuerySpec,以便在为 azure cosmos db 构建查询时能够在 IN 表达式中使用它。我正在尝试做的事情就像我们对常规(字符串、整数等)参数所做的一样:
private SqlQuerySpec BuildQuery(IEnumerable<string> exclTypes)
{
var queryText = "SELECT * FROM root r WHERE r.Type NOT IN (@types)";
var parameters = new SqlParameterCollection{new SqlParameter("@types", exclTypes.ToArray())};
return new SqlQuerySpec()
{QueryText = queryText, Parameters = parameters};
}
Run Code Online (Sandbox Code Playgroud)
但这不会以这种方式工作。我可以通过任何其他方式将数组作为参数传递吗?谢谢。
dee*_* zg 10
您的查询应如下所示:
SELECT * FROM root r WHERE ARRAY_CONTAINS(@types, r.Type) <> true
Run Code Online (Sandbox Code Playgroud)
然后您可以@types作为数组传递并检查该数组是否包含您r.Type在文档中的属性中的值。
参考:
https://docs.microsoft.com/en-us/azure/cosmos-db/sql-api-sql-query-reference#bk_array_contains https://github.com/Azure/azure-documentdb-node/issues/156