Cosmos DB 参数化 SQL 查询不适用于双引号参数

Cosmos DB parameterised SQL query not working with double quoted parameter

我的这个查询在数据资源管理器中运行良好 - 查询是否存在字典项:

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": [
    ]
}

我想这一定与转义字符有关...

我还没有尝试过,但我相信这应该有效:

var query = new QueryDefinition("SELECT VALUE COUNT(c) FROM c WHERE not IS_DEFINED(c.Answers[@quNo])")
    .WithParameter("@quNo", "2");