返回超过1000个Windows Azure表查询实体
我的问题正是。然而,Azure存储API已经改变,我能找到的关于这个问题的所有答案都与旧版本有关。在当前的API版本中,如何处理返回超过1000项的查询?获取少于1000项的查询如下所示:返回超过1000个Windows Azure表查询实体,azure,odata,azure-table-storage,Azure,Odata,Azure Table Storage,我的问题正是。然而,Azure存储API已经改变,我能找到的关于这个问题的所有答案都与旧版本有关。在当前的API版本中,如何处理返回超过1000项的查询?获取少于1000项的查询如下所示: var query = new TableQuery<TermScoreEntity>() .Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, Name))
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);
var query=new TableQuery()
.Where(TableQuery.GenerateFilterCondition(“PartitionKey”,QueryComparisons.Equal,Name));
var table=_tableClient.GetTableReference(“分数”);
foreach(表中的var termScoreEntity.ExecuteQuery(查询))
添加(termScoreEntity.RowKey,termScoreEntity.Score);
您的代码看起来正确,基本上与“如何:检索分区中的所有实体”相同
您确定该分区中有1000多个实体吗?您可以通过两种不同的方式来检查这一点:
您是否尝试使用上述代码检索1000多个实体?我认为使用简单的
ExecuteQuery
就足够了
文档只说它对纯REST请求有1000限制,ExecuteQuery
API在内部使用此REST API,但会自动剪切为多个请求,每个请求都有1000的限制
因此,如果您使用.NET包,您不必担心这个限制,库已经为您处理了。有关更多信息,请参阅此文档
下面是Azure SDK中执行任务的一些关键代码,如果不指定执行代码,您会发现最大值为9223372036854775807L
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);
}
内部IEnumerable执行(CloudTableClient客户端、CloudTable表、TableRequestOptions requestOptions、OperationContext OperationContext)
{
AssertNotNullOrEmpty(“tableName”,table.Name);
TableRequestOptions modifiedOptions=TableRequestOptions.ApplyDefaults(requestOptions,客户端);
operationContext=operationContext??新建operationContext();
返回CommonUtility.LazyEnumerable((Func)(continuationToken=>
{
TableQuerySegment local_0=this.ExecuteQuerySegmented((TableContinuationToken)continuationToken、客户端、表、修改选项、操作上下文);
返回新的ResultSegment(本地\u 0.结果)
{
ContinuationToken=(IContuationToken)本地\u 0.ContinuationToken
};
}),this.takeCount.HasValue?(long)this.takeCount.Value:long.MaxValue);
}
你链接的文章是入门教程,他们可能不考虑在这一点上有超过1000行的查询。然而,我已经解决了,并将发布答案…我不知道,我在那里做了什么,你是绝对正确的!!我删除了我的答案。完全正确,我不知道为什么我认为它不起作用。一定是我错过了什么。谢谢你的回答!