C#调用CosmosDB ARRAY_CONTAINS查询报400错误,求解决方案
解决思路及修正方案
问题核心是CosmosDB SQL要求JSON对象的键必须用双引号,你当前C#代码中用单引号包裹对象的键('Code'),不符合JSON语法规范,导致数据库解析查询时返回400错误。
修正后的查询语句写法
方式1:转义双引号(适配插值字符串)
将单引号替换为转义后的双引号(C#插值字符串中用\"表示双引号):
$"SELECT * FROM c WHERE ARRAY_CONTAINS(c.AlertsConfiguration, {{\"Code\":@alertCode, \"isEnabled\":true}}, true)";
方式2:使用逐字字符串(更易读)
用@开头的逐字字符串,内部双引号用""转义:
@"SELECT * FROM c WHERE ARRAY_CONTAINS(c.AlertsConfiguration, {""Code"":@alertCode, ""isEnabled"":true}, true)";
验证逻辑
修正后,C#生成的查询语句会和你在数据库中直接运行的版本完全一致(用双引号包裹JSON对象的键),符合CosmosDB SQL语法要求,即可正常执行查询。
内容的提问来源于stack exchange,提问作者pedrodotnet
相关产品推荐
相关产品推荐

