0

在 Windows Azure 表存储上,我正在执行下一个查询:

CloudTableClient ctc=TableStorage.getTableClient();
String q1=TableQuery.generateFilterCondition(TableConstants.PARTITION_KEY, QueryComparisons.EQUAL, Long.toHexString(partitionId));
TableQuery<Actividad> rangeQuery=TableQuery.from(tableName, Actividad.class).where(q1).take(2);
int e=0;
for(Actividad ac:ctc.execute(query)){
    e++;
}
System.out.println(e);

但是我得到了分区上的所有行,而不仅仅是在 take(2) 上指定的前 2 行。

有什么建议吗?

回复 smarx:

我使用 Wireshark 查看 http 请求:

最初的请求是:

GET /actividadreciente?$filter=PartitionKey%20eq%20%2717%27&$top=2&timeout=60

服务有响应,然后发出很多请求:

GET /actividadreciente? $filter=PartitionKey%20eq%20%2717%27&$top=2&NextRowKey=1%2124%21RkZGRkZFQzY2REYzMTA3Mw--&timeout=60&NextPartitionKey=1%214%21MTc-

GET /actividadreciente?$filter=PartitionKey%20eq%20%2717%27&$top=2&NextRowKey=1%2124%21RkZGRkZFQzY3Mjk2MEZEOA--&timeout=60&NextPartitionKey=1%214%21MTc-

GET /actividadreciente?$filter=PartitionKey%20eq%20%2717%27&$top=2&NextRowKey=1%2124%21RkZGRkZFQzY3Mjk5MzVGOQ--&timeout=60&NextPartitionKey=1%214%21MTc-

等等。

4

1 回答 1

0

Smarx 是对的,可以迭代所有结果,但如果你只迭代前 2 个,那么库只会对这些项目发出请求。使用附加请求进行后续迭代。所以解决方案是使用下面的代码:

CloudTableClient ctc=TableStorage.getTableClient();
final int limit=2;
String q1=TableQuery.generateFilterCondition(TableConstants.PARTITION_KEY, QueryComparisons.EQUAL, Long.toHexString(partitionId));
TableQuery<Actividad> rangeQuery=TableQuery.from(tableName, Actividad.class).where(q1).take(limit);
int e=0;
for(Actividad ac:ctc.execute(query)){
    e++;
    //Use ac
    if(e==limit)break;
}
System.out.println(e);

非常感谢Smarx!

于 2012-09-27T22:08:21.600 回答