Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将数组作为sql查询参数传递给cosmos DB查询_C#_Sql_Azure_Azure Cosmosdb - Fatal编程技术网

C# 如何将数组作为sql查询参数传递给cosmos DB查询

C# 如何将数组作为sql查询参数传递给cosmos DB查询,c#,sql,azure,azure-cosmosdb,C#,Sql,Azure,Azure Cosmosdb,我想将数组作为参数传递给SqlQuerySpec,以便在为azure cosmos db构建查询时能够在in表达式中使用它。 我试图做的是类似于我们使用常规(字符串、int等)参数所做的事情: private SqlQuerySpec BuildQuery(IEnumerable exclusivetypes) { var queryText=“从根r中选择*,其中r.Type不在(@types)”; var parameters=new-SqlParameterCollection{new-S

我想将数组作为参数传递给SqlQuerySpec,以便在为azure cosmos db构建查询时能够在in表达式中使用它。 我试图做的是类似于我们使用常规(字符串、int等)参数所做的事情:

private SqlQuerySpec BuildQuery(IEnumerable exclusivetypes)
{
var queryText=“从根r中选择*,其中r.Type不在(@types)”;
var parameters=new-SqlParameterCollection{new-SqlParameter(@types),exclustypes.ToArray())};
返回新的SqlQuerySpec()
{QueryText=QueryText,Parameters=Parameters};
}
但这样做是行不通的。还有其他方法可以将数组作为参数传递吗?
谢谢。

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

您的查询应该是这样的:

SELECT * FROM root r WHERE ARRAY_CONTAINS(@types, r.Type) <> true
从根r中选择*,其中数组_包含(@types,r.Type)true
然后可以将
@types
作为数组传递,并检查该数组是否包含文档中属性
r.Type
中的值

参考文献:


谢谢,但我不知道你在说什么。我没有使用cosmos表存储,而是使用文档存储。你能写一个小例子或者给我一个我能找到的教程的链接吗?如果我错了,请纠正我,但是cosmosDB SQL没有TVP概念。所以这个答案不适用于这个问题,应该删除。
SELECT * FROM root r WHERE ARRAY_CONTAINS(@types, r.Type) <> true