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

时间:2017-12-28 07:47:41

标签: 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};
}

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

2 个答案:

答案 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谓词的一部分。网上有很多关于此的资料。