【问题标题】:How to query against Dictionary contents in Azure CosmosDB/DocumentDB?如何查询 Azure CosmosDB/DocumentDB 中的字典内容?
【发布时间】:2018-06-06 15:15:29
【问题描述】:

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

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

【问题讨论】:

  • 你试过没有包含吗?即documentQueryable.Where(doc =&gt; doc.Attributes["City"] == "NY"); - 根本不应该返回没有City 键的文档。

标签: c# linq azure azure-cosmosdb


【解决方案1】:

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

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

【讨论】:

  • 是否有任何选项可让字典键不区分大小写?
【解决方案2】:

以下应该可以工作,你可以从here阅读同样的内容

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-07
    • 1970-01-01
    • 1970-01-01
    • 2018-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多