2011-05-09 42 views
5

我想使用PrimaryKey查询我的azure tablestorage,并且我想检查我的RowKey是否在一个范围内。例如范围02001至02999如何使用Azure表存储选择RowKey范围?

有人可以告诉我怎么做到这一点吗?我知道如何用一个简单的查询PK:

where fooEntiy.PartitionKey == partition 

但我不知道如何查询fooEntity.RowKey。

此外,如果我通过指定范围来做到这一点,那么它是否仍然检索该分区的所有条目,然后检查它们是否与范围匹配?

谢谢你的建议,

圆子

回答

11

你的查询可以是这个样子:

where fooEntity.PartitionKey == partionKey 
    && fooEntity.RowKey.CompareTo(lowerBoundRowKey) >= 0 
    && fooEntity.RowKey.CompareTo(upperBoundRowKey) <= 0 

这将返回所有lowerBoundRowKeyupperBoundRowKey包括那些值之间的项目(如果你不希望它是包容性的,只要用>和<而不是> =和< =)。

您不需要进行任何其他过滤。

它看起来像你已经填充你的数字,你存储在RowKey与前导零这是一件好事,因为这个范围将是一个词法范围,而不是数字范围。

例如运行此查询与lowerBoundKey = 10upperBoundKey = 100不会随着20

一个RowKey返回一个项目如果你垫它用零但是lowerBoundKey = 00010upperBoundKey = 00100将与00020.

+0

非常感谢您一个RowKey退回商品建议 – 2011-05-09 06:22:35

+0

+1 - 还有一点 - 如果你运行查询,确保你检查延续标记 - 即使返回少于1000行,你仍然可以获得延续标记。 – Stuart 2011-05-09 06:40:40

+1

好点。或者你可以使用.AsTableServiceQuery()。 http://msdn.microsoft.com/en-us/library/ee741713.aspx http://msdn.microsoft.com/en-us/library/ee758648.aspx – knightpfhor 2011-05-09 20:52:41

2

这将使用RowKey值与指定PartitionKey的指定范围带来的实体:

“PartitionKey EQ '你partitonKey值' 和(RowKey GT '02001'和RowKey lt'02999')“

查找更多信息herehere。 希望这有助于。