【发布时间】:2021-03-10 08:21:46
【问题描述】:
我让这个查询在数据资源管理器中运行良好 - 查询字典项的存在:
SELECT VALUE COUNT(c) FROM c WHERE not IS_DEFINED(c.Answers["2"])
给定一个带有数据集的容器,例如(简化):
[
{
"Name": "Donald",
"Answers": {
"1": {
"a": 3,
"isCorrect": false
},
"2": {
"a": 7,
"isCorrect": false
}
},
},
{
"Name": "Boris",
"Answers": {
"1": {
"a": 2,
"isCorrect": false
}
},
},
]
但我现在正试图在代码中对其进行参数化,除非我对参数进行硬编码(即不要参数化),否则它似乎不起作用。
这不起作用:
var query = new QueryDefinition("SELECT VALUE COUNT(c) FROM c WHERE not IS_DEFINED(c.Answers[\"@quNo\"])")
.WithParameter("@quNo", 2);
但这确实有效:
var query = new QueryDefinition("SELECT VALUE COUNT(c) FROM c WHERE not IS_DEFINED(c.Answers[\"2\"])");
任何想法为什么参数化不起作用?我想这是因为双引号,但不知道如何解决它。
我也尝试过更改为字符串文字,例如
@"SELECT ... <snip> not IS_DEFINED(c.Answers[""@quNo""])";
但这也行不通。
更新:
我添加了一个RequestHandler 来准确跟踪发送到 Cosmos 的内容。发送参数化时,格式为:
{
"query": "SELECT VALUE [{\"item\": COUNT(c)}]\nFROM c\nWHERE not IS_DEFINED(c.Answers[\"@quNo\"])",
"parameters": [
{
"name": "@quNo",
"value": 2
}
]
}
根据建议,我尝试将参数值设置为整数或字符串,但都不起作用。
直接在查询中设置值是唯一可行的方法:
{
"query": "SELECT VALUE [{\"item\": COUNT(c)}]\nFROM c\nWHERE not IS_DEFINED(c.Answers[\"2\"])",
"parameters": [
]
}
我认为这一定与转义字符有关...
【问题讨论】:
标签: c# azure-cosmosdb azure-cosmosdb-sqlapi