在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-
等等。
答案 0 :(得分:0)
Smarx是对的,可以迭代所有结果,但是如果你只迭代前2个,那么库只会向这些项发出请求。使用aditional请求进行子序列迭代。所以解决方案是使用下一个代码:
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!