如何使用字典在 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;
}
}
我有一些数据存储在 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;
}
}