我想将数组作为参数传递给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};
}
但这并不是这样的。我可以将数组作为参数传递给其他任何方式吗? 感谢。
答案 0 :(得分: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 :(得分:-1)
执行此操作的最简单方法是设置表值参数。您的数组将作为TVP传递,因为它是一个表,它可以用作IN谓词的一部分。网上有很多关于此的资料。