Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
返回超过1000个Windows Azure表查询实体_Azure_Odata_Azure Table Storage - Fatal编程技术网

返回超过1000个Windows Azure表查询实体

返回超过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))

我的问题正是。然而,Azure存储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);
var query=new TableQuery()
.Where(TableQuery.GenerateFilterCondition(“PartitionKey”,QueryComparisons.Equal,Name));
var table=_tableClient.GetTableReference(“分数”);
foreach(表中的var termScoreEntity.ExecuteQuery(查询))
添加(termScoreEntity.RowKey,termScoreEntity.Score);

您的代码看起来正确,基本上与“如何:检索分区中的所有实体”相同

您确定该分区中有1000多个实体吗?您可以通过两种不同的方式来检查这一点:

  • 使用Visual Studio或其他一些存储资源管理器运行相同的查询,并查看得到的结果数量
  • 在运行代码时使用Fiddler,查看响应中是否返回了延续令牌。如果有延续令牌,那么您正在使用的代码应该自动跟随它们并创建一个新请求。如果没有延续标记,则意味着没有更多的实体匹配您的查询

  • 您是否尝试使用上述代码检索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行的查询。然而,我已经解决了,并将发布答案…我不知道,我在那里做了什么,你是绝对正确的!!我删除了我的答案。完全正确,我不知道为什么我认为它不起作用。一定是我错过了什么。谢谢你的回答!