【发布时间】:2017-12-10 13:27:33
【问题描述】:
我正在.Net 中为 Cosmos DB 创建一个存储库,并且为了避免使用 [JsonProperty(PropertyName = "thePropertyName")] 装饰每个类属性,我已经使用 [JsonObject(NamingStrategyType = typeof(CamelCaseNamingStrategy))] 装饰了我的类。
CreateDocumentAsync(例如)使用属性的驼峰式名称以 JSON 格式正确序列化我的 Cosmos DB 文档。到目前为止一切顺利。
然而,我的问题是,当我通过 LINQ 查询 Cosmos DB 时,它生成的用于查询 COSMOS DB 的 SQL 不尊重装饰类的 [JsonObject(NamingStrategyType = typeof(CamelCaseNamingStrategy))] 属性,因此不会返回任何文档。这是因为 Cosmos DB 查询对于字段/属性名称是区分大小写的。例如,以下产生不同的结果(注意名称的大小写差异):
SELECT * FROM c WHERE c.name = "Health"
对比
SELECT * FROM c WHERE c.Name = "Health"
我已通过检查CreateDocumentQuery 生成的查询 SQL 确认了这一点,并寻找了可能允许我在 SqlQuerySpec 中指示属性名称大小写但没有成功的选项。
所以,我的问题是:有谁知道如何在 Cosmos Db 中使用类定义的驼峰大小写策略进行 LINQ 查询,而不必通过 [JsonProperty(PropertyName = "thePropertyName")] 手动设置每个属性。
提前感谢大家的帮助。
【问题讨论】:
-
布莱恩,感谢您的格式化。我的第一个问题完全忘记了格式化。以后会尽量避免。
标签: c# json linq json.net azure-cosmosdb