使用 ExecuteSegmented 获取特定数量的分页结果
Get specific number of paginated results using ExecuteSegmented
我对 Azure table 存储的理解是我们应该使用 ExecuteSegmented
对分页查询进行粒度控制。很好,但是如果我想获得(例如)500 个结果,我能得到的最接近结果是这样的:
TableQuery<Footwear> query =
table.CreateQuery<Footwear>().Where(f => f.PartitionKey == partitionKey).Take(500).AsTableQuery();
TableContinuationToken token = null;
List<Footwear> shoes = new List<Footwear>();
do
{
TableQuerySegment<Footwear> queryResult = query.ExecuteSegmented(token);
token = queryResult.ContinuationToken;
shoes.AddRange(queryResult.Results);
} while (token != null && (tableQuery.TakeCount < rows.Count));
哪种工作方式,(例如)第一个分页查询 returns 300 个结果,因此它使用令牌获取另一页,然后是第二页 returns (例如) 250 个结果.. 结果是我理想中想要 500 个结果,但我得到了 550
有没有更好的方法来解决这个问题,以便我得到恰好 500 个结果?
您可以做的一件事是继续减少每次查询迭代中要获取的记录数。因此,您从要获取的 500 条记录开始,然后返回 300 条记录。在下一次迭代中,您尝试只取回 200 条记录。如果你得到 200 条记录,你只需跳出循环,否则继续迭代。
类似于:
var totalResultsToFetch = 500;
TableQuery<Footwear> query = table.CreateQuery<Footwear>().Where(f => f.PartitionKey == partitionKey).Take(totalResultsToFetch).AsTableQuery();
TableContinuationToken token = null;
List<Footwear> shoes = new List<Footwear>();
do
{
TableQuerySegment<Footwear> queryResult = query.ExecuteSegmented(token);
token = queryResult.ContinuationToken;
shoes.AddRange(queryResult.Results);
totalResultsToFetch -= queryResult.Results.Count;
query = table.CreateQuery<Footwear>().Where(f => f.PartitionKey == partitionKey).Take(totalResultsToFetch).AsTableQuery();
} while (token != null && (totalResultsToFetch > 0));
我对 Azure table 存储的理解是我们应该使用 ExecuteSegmented
对分页查询进行粒度控制。很好,但是如果我想获得(例如)500 个结果,我能得到的最接近结果是这样的:
TableQuery<Footwear> query =
table.CreateQuery<Footwear>().Where(f => f.PartitionKey == partitionKey).Take(500).AsTableQuery();
TableContinuationToken token = null;
List<Footwear> shoes = new List<Footwear>();
do
{
TableQuerySegment<Footwear> queryResult = query.ExecuteSegmented(token);
token = queryResult.ContinuationToken;
shoes.AddRange(queryResult.Results);
} while (token != null && (tableQuery.TakeCount < rows.Count));
哪种工作方式,(例如)第一个分页查询 returns 300 个结果,因此它使用令牌获取另一页,然后是第二页 returns (例如) 250 个结果.. 结果是我理想中想要 500 个结果,但我得到了 550
有没有更好的方法来解决这个问题,以便我得到恰好 500 个结果?
您可以做的一件事是继续减少每次查询迭代中要获取的记录数。因此,您从要获取的 500 条记录开始,然后返回 300 条记录。在下一次迭代中,您尝试只取回 200 条记录。如果你得到 200 条记录,你只需跳出循环,否则继续迭代。
类似于:
var totalResultsToFetch = 500;
TableQuery<Footwear> query = table.CreateQuery<Footwear>().Where(f => f.PartitionKey == partitionKey).Take(totalResultsToFetch).AsTableQuery();
TableContinuationToken token = null;
List<Footwear> shoes = new List<Footwear>();
do
{
TableQuerySegment<Footwear> queryResult = query.ExecuteSegmented(token);
token = queryResult.ContinuationToken;
shoes.AddRange(queryResult.Results);
totalResultsToFetch -= queryResult.Results.Count;
query = table.CreateQuery<Footwear>().Where(f => f.PartitionKey == partitionKey).Take(totalResultsToFetch).AsTableQuery();
} while (token != null && (totalResultsToFetch > 0));