gpt4 book ai didi

c# - 从 Azure 表存储获取 1000 多个数据集

转载 作者:行者123 更新时间:2023-12-02 19:41:36 27 4
gpt4 key购买 nike

我有一个 Azure 函数来对 Azure 表存储中的数据集执行一些操作。

由于分组在 Azure 表存储中不起作用,因此我必须获取表中的所有数据集并在 C# 代码中执行我想要的操作(分组、筛选)。

但每个查询仅检索前 1000 个数据集。如何获取所有数据集 - 或者以 1000 为单位迭代表以最终获取所有数据集?

TableQuery<Models.product_item> query = new TableQuery<Models.product_item>()
.Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, myPartitionKey));

var queryResult = myTable.ExecuteQuery(query);

最佳答案

当您的查询未在一定限制内(最多 5 秒,最多 1000 行,请参阅 here)完成时,您将在结果对象中收到一个 ContinuationToken。将此 token 传递给另一个查询以继续您的第一个查询并获取下一组行。

此扩展方法可以为您完成这项工作:

public static class QueryExtensions
{
public static async Task<IEnumerable<TElement>> ExecuteQueryAllElementsAsync<TElement>(this CloudTable table, TableQuery<TElement> tableQuery)
where TElement : ITableEntity, new()
{
TableContinuationToken continuationToken = default(TableContinuationToken);
var results = new List<TElement>(0);
tableQuery.TakeCount = 500;

do
{
//Execute the next query segment async.
var queryResult = await table.ExecuteQuerySegmentedAsync(tableQuery, continuationToken);

//Set exact results list capacity with result count.
results.Capacity += queryResult.Results.Count;
results.AddRange(queryResult.Results);

continuationToken = queryResult.ContinuationToken;

} while (continuationToken != null);

return results;
}
}

然后您可以在代码中使用它,例如

var queryResult = await myTable.ExecuteQueryAllElementsAsync(query);

关于c# - 从 Azure 表存储获取 1000 多个数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60019560/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com