如何将数组作为cosql DB查询的sql查询参数传递

问题描述 投票:1回答:2

我想将数组作为参数传递给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};
}

但这并不是这样的。我可以将数组作为参数传递给其他任何方式吗?谢谢。

c# sql azure azure-cosmosdb
2个回答
4
投票

您的查询应如下所示:

SELECT * FROM root r WHERE ARRAY_CONTAINS(@types, r.Type) <> true

然后你可以将@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


-1
投票

最简单的方法是设置一个表值参数。您的数组将作为TVP传递,因为它是一个表,它可以用作IN谓词的一部分。网上有很多关于此的资料。

© www.soinside.com 2019 - 2024. All rights reserved.