首页 > 解决方案 > IQueryable 执行 LINQ 查询后返回空结果

问题描述

我正在使用 Microsoft.Azure.Documents.IDocumentClient 接口通过 CreateDocumentQuery 方法访问 CosmosDB 文档。

当我在不包含任何 linq 查询的情况下运行代码时,我的所有文档都没有问题:

client.CreateDocumentQuery<MyDatabaseClass>(CollectionUri, options)
      .ToList()

我想获取文档的 ID,所以我尝试以下代码:

client.CreateDocumentQuery<MyDatabaseClass>(CollectionUri, options)
      .Select(doc => doc.Id)
      .ToList()

这将返回 0 个结果。

如果我在执行查询之前切换它并枚举 IQueryable ,它工作正常,但据我了解这些东西(虽然我很有可能不这样做),性能较差。

client.CreateDocumentQuery<MyDatabaseClass>(CollectionUri, options)
      .ToList()
      .Select(doc => doc.Id)

有谁知道我在可查询的情况下做错了什么?(注意,上面是我实际尝试实现的简化版本,但即使在这个级别上仍然会出现问题)。

数据库项架构:

{
  "type": "",
  "view": {
    "date": "",
    "paths": {}
  },
  "id": "",
  "viewId": ""
  "version": "",
  "_rid": "",
  "_self": "",
  "_etag": "",
  "_attachments": "",
  "_ts": ""
}

班级:

public string Id{ get; private set; }

public string ViewId { get; private set; }

public string Version { get; private set; }

public abstract string Type { get; }

标签: c#.netlinqazure-cosmosdbiqueryable

解决方案


我能够使用采用 SQL 查询而不是使用 LINQ的CreateDocumentQuery 重载来解决这个问题。


推荐阅读