为什么我的参数没有被替换?

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.

无关

同样有效的代码:

使用的数据集