需要使用 ExecuteQuerySegmentedAsync 的 Azure Table 查询示例

Need example for Azure Table query using ExecuteQuerySegmentedAsync

我只是想让 Azure Table 中的所有实体都匹配某个字段名称,但似乎找不到任何我可以从中学习的最新示例。

最终我想在 HTML table 中显示结果回到我的视图 所以我想 List<ActivityModel> 会感觉。那个或 IEnumerable 因为我不需要更改任何实体(只需阅读)。无论哪种方式,我都在为基本概念而苦苦挣扎。

public async Task<List<ActivityModel>> GetActivitiesAsync(string domainName)
    {
        CloudTable cloudTable = TableConnection("NodeEvents");
        TableQuery<ActivityModel> query = new TableQuery<ActivityModel>().Where(
            TableQuery.GenerateFilterCondition("DomainName", QueryComparisons.Equal, domainName)
        );

        //tried many examples of continuation tokens/etc
    }

我遇到的问题 运行 是所有最新的 SDK 都使用 ContinuationToken 进行异步调用,我似乎找不到任何好的示例。这看起来应该是一个简单的任务。感谢任何帮助。

尝试遵循 here 但示例引用的方法和操作不再可用。

这对我有用。我无法在那里找到任何显示最近使用 Azure Tables SDK 的信息。希望这对其他人有用。此处还有更多注意事项:

  1. table 有数千个实体,而我总共只想要大约 500 个。虽然下面的代码有点工作,但它需要一些工作才能使用 .Take(int)。据我了解,"Take" 方法只会限制每个查询返回的记录数。由于我可能需要处理一个延续令牌,因此将其设置为 5 之类的值在列表末尾之前每个请求只需要 5 个实体。

  2. 我添加了一个索引计数器以防万一我们得到超过 500 条记录但是我的测试显示 2000 多条记录与没有它的 5000 多条记录所以这可能是异步性质的结果电话?

    public async Task<List<ActivityModel>> GetActivitiesAsync(string domainName)
    {
        List<ActivityModel> activities = new List<ActivityModel>();
        CloudTable cloudTable = TableConnection("NodeEvents");
        string filter = TableQuery.GenerateFilterCondition("DomainName", QueryComparisons.Equal, domainName);
        TableContinuationToken continuationToken = null;
    
        do
        {
            var result = await cloudTable.ExecuteQuerySegmentedAsync(new TableQuery<ActivityModel>().Where(filter), continuationToken);
            continuationToken = result.ContinuationToken;
            int index = 0;
            if (result.Results != null)
            {
                foreach (ActivityModel entity in result.Results)
                {
                    activities.Add(entity);
                    index++;
                    if (index == 500)
                        break;
                }
            }
    
        } while (continuationToken != null);
    
        return activities;
    }