如何在Azure CosmosDB / DocumentDB中查询字典内容?

时间:2018-06-06 15:15:29

标签: c# linq azure azure-cosmosdb

我正在使用C#代码在Azure CosmosDB中存储对象。应用程序启动时,这些对象的属性未完全定义,因此可能会在运行时添加或删除某些对象。这就是为什么我有一个属性"属性"类型中的Dictionary类型:

public Dictionary<string, string> Attributes { get; }

但是如何针对此属性的内容编写查询?例如,我想写一个像:

这样的查询
documentQueryable
  .Where(doc => doc.Attributes.ContainsKey("City") && doc.Attributes["City"] == "NY");

但是,不支持此功能:

Microsoft.Azure.Documents.Linq.DocumentQueryException: Method 'ContainsKey' is not supported., documentdb-dotnet-sdk/1.22.0 Host/32-bit MicrosoftWindowsNT/10.0.14393.0

2 个答案:

答案 0 :(得分:2)

由于Cosmos DB是无模式的,因此您无需检查密钥是否存在。如果您将代码更改为以下代码,它应该按预期工作:

documentQueryable.Where(doc => doc.Attributes["City"] == "NY");

答案 1 :(得分:1)

以下内容应该有效,您可以在here

上阅读相同内容
documentQueryable.Where(doc => doc.Attributes["City"] == "NY");