为什么我的参数没有被替换?
Why is my Parameter not being substituted?
我正在使用以下查询来查询 CosmosDB,由于 ARRAY_CONTAINS,我无法使用 LINQ,问题是我的应用程序崩溃并出现空异常,因为 SQLParameter 从未被替换。
查询看起来像这样
var sqlStatement = new SqlQuerySpec
{
QueryText = "SELECT * FROM c where ARRAY_CONTAINS(c.locales[0].categories, @category)",
Parameters = new SqlParameterCollection()
{
new SqlParameter{ Name = "@category", Value = "Homeware" }
}
};
IDocumentQuery<JObject> query = client.CreateDocumentQuery<JObject>(
collectionUr
sqlStatement)
.AsDocumentQuery();
while (query.HasMoreResults)
{
items.AddRange(await query.ExecuteNextAsync<JObject>());
}
您可以参考以下适合我的代码:
var Parameters = new SqlParameterCollection()
{
new SqlParameter(Name = "@category", Value = "Homeware")
};
IQueryable<Pojo> queryable = client.CreateDocumentQuery<Pojo>(
uri,
new SqlQuerySpec
{
QueryText = "SELECT * FROM c where ARRAY_CONTAINS(c.locales[0].categories, " + Parameters[0].Value + ")"
});
抱歉,Jay 的回答是错误的。他的方法实际上并没有参数化 SqlQuerySpec,而是它只是连接 return 中没有正确参数化查询的字符串。和没有参数集合一样。
我刚刚用您拥有的完全相同的数据集测试了您提供的代码,它绝对没问题。空异常与您的 SqlParameterCollection
.
无关
同样有效的代码:
使用的数据集
我正在使用以下查询来查询 CosmosDB,由于 ARRAY_CONTAINS,我无法使用 LINQ,问题是我的应用程序崩溃并出现空异常,因为 SQLParameter 从未被替换。
查询看起来像这样
var sqlStatement = new SqlQuerySpec
{
QueryText = "SELECT * FROM c where ARRAY_CONTAINS(c.locales[0].categories, @category)",
Parameters = new SqlParameterCollection()
{
new SqlParameter{ Name = "@category", Value = "Homeware" }
}
};
IDocumentQuery<JObject> query = client.CreateDocumentQuery<JObject>(
collectionUr
sqlStatement)
.AsDocumentQuery();
while (query.HasMoreResults)
{
items.AddRange(await query.ExecuteNextAsync<JObject>());
}
您可以参考以下适合我的代码:
var Parameters = new SqlParameterCollection()
{
new SqlParameter(Name = "@category", Value = "Homeware")
};
IQueryable<Pojo> queryable = client.CreateDocumentQuery<Pojo>(
uri,
new SqlQuerySpec
{
QueryText = "SELECT * FROM c where ARRAY_CONTAINS(c.locales[0].categories, " + Parameters[0].Value + ")"
});
抱歉,Jay 的回答是错误的。他的方法实际上并没有参数化 SqlQuerySpec,而是它只是连接 return 中没有正确参数化查询的字符串。和没有参数集合一样。
我刚刚用您拥有的完全相同的数据集测试了您提供的代码,它绝对没问题。空异常与您的 SqlParameterCollection
.
同样有效的代码:
使用的数据集