如何将数组作为 sql 查询参数传递给 Cosmos DB 查询

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