如何使用字典在 cosmos db 查询的结果中添加更多信息?

How to add more info in the results from a query on cosmos db using a dictionary?

我有一些数据存储在 Comsos 数据库中,另一些数据存储在 SQL 中。来自 SQL 的数据每 5 分钟检索一次,并存储在 ConcurrentDictionary 中。我需要查询 Cosmos 上的数据并使用字典向结果中添加更多信息。所以这是代码:

public IAsyncEnumerable<LogDto> GetLogsAsync(string tenantId, CancellationToken cancellationToken)
        {
            return _container.GetItemLinqQueryable<Log>()
                .Where(l => l.TenantId != null && l.TenantId.ToLower() == tenantId.ToLower()) 
                .Take(10)
                .Select(l => new LogDto()
                {
                    SerialId = l.SerialId,
                    SiteId = l.SiteId,
                    SiteName = _cacheService._siteDictionary[l.SiteId],
                })
                .ToFeedIterator()
                .ToAsyncEnumerable(cancellationToken);
        }

但我收到以下错误:

指定的查询包含 'member indexer' 当前不受支持。

有什么解决方法吗?非常感谢任何帮助。

您需要先 运行 查询,然后迭代生成的集合并设置 SiteName 属性 一旦每个项目为 in-memory 因为您可以不要将此作为 Cosmos 查询的一部分。

尝试这样的事情:

public async IAsyncEnumerable<LogDto> GetLogsAsync(string tenantId, CancellationToken cancellationToken)
{
   var results = _container.GetItemLinqQueryable<Log>()
                .Where(l => l.TenantId != null && l.TenantId.ToLower() == tenantId.ToLower()) 
                .Take(10)
                .Select(l => new LogDto()
                {
                    SerialId = l.SerialId,
                    SiteId = l.SiteId
                })
                .ToFeedIterator()
                .ToAsyncEnumerable(cancellationToken);

   await foreach (var result in results)
   {
      result.SiteName = _cacheService._siteDictionary[result.SiteId];
      yield return result;
   }
}