Mar*_*arc 2 azure odata azure-table-storage
我的问题正是这个问题.但是,Azure Storage API已更改,我可以为此问题找到的所有答案都处理旧版本.如何处理当前API版本中返回超过1000个项目的查询?获取少于1000个项目的查询如下所示:
var query = new TableQuery<TermScoreEntity>()
.Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, Name));
var table = _tableClient.GetTableReference("scores");
foreach (var termScoreEntity in table.ExecuteQuery(query))
result.Add(termScoreEntity.RowKey, termScoreEntity.Score);
Run Code Online (Sandbox Code Playgroud)
您是否尝试使用上述代码检索超过1000个实体?我认为使用简单ExecuteQuery就足够了.
该文档仅表示它对纯REST请求有1,000个限制,ExecuteQueryAPI内部使用此rest api,但自动切换为多个请求,每个请求的限制为1,000.
因此,如果您使用.NET包,则无需担心此限制,库已经为您处理了此问题.您可以参考此主题以获取更多信息.
以下是ExecuteQuery来自Azure SDK的一些关键代码,9223372036854775807L如果您没有指定take数字,您会发现实际上最大数字是:
internal IEnumerable<DynamicTableEntity> Execute(CloudTableClient client, CloudTable table, TableRequestOptions requestOptions, OperationContext operationContext)
{
CommonUtility.AssertNotNullOrEmpty("tableName", table.Name);
TableRequestOptions modifiedOptions = TableRequestOptions.ApplyDefaults(requestOptions, client);
operationContext = operationContext ?? new OperationContext();
return CommonUtility.LazyEnumerable<DynamicTableEntity>((Func<IContinuationToken, ResultSegment<DynamicTableEntity>>) (continuationToken =>
{
TableQuerySegment<DynamicTableEntity> local_0 = this.ExecuteQuerySegmented((TableContinuationToken) continuationToken, client, table, modifiedOptions, operationContext);
return new ResultSegment<DynamicTableEntity>(local_0.Results)
{
ContinuationToken = (IContinuationToken) local_0.ContinuationToken
};
}), this.takeCount.HasValue ? (long) this.takeCount.Value : long.MaxValue);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2696 次 |
| 最近记录: |