Azure表存储 - 在RowKey上搜索以特定字符串

时间:2018-03-15 17:45:50

标签: string azure azure-storage azure-table-storage string-operations

我正在使用Azure表存储,它提供的查询表存储的选项非常少。我通过以下方式将RowKey作为组合键:

"b844be0d-2280-49f7-9ad7-58c36da80d22_2518908336099522182"
,"b844be0d-2280-49f7-9ad7-58c36da80d22_2518908336099522183"
,"b844be0d-2280-49f7-9ad7-58c36da80d22_2518908336099522184"
,"b844be0d-2280-49f7-9ad7-58c36da80d22_2518908336099522185"

第一部分是Guid,分隔符(_)后面的第二部分是时间戳。

我想使用其运算符搜索以“2518908336099522182”结尾的rowkeys的azure存储

没有“Contains”运算符可以在这里提供帮助,我该怎么做才能使它适用于“EndsWith”类型的过滤?

2 个答案:

答案 0 :(得分:0)

需要注意的事项:PartitionKey和RowKey属性都是String类型,您可以通过使用 $ filter 过滤内容,或者通过过滤PartitionKey来过滤内容和Rowkey如下:

https://myaccount.table.core.windows.net/Customers(PartitionKey='MyPartition',RowKey='MyRowKey1')

另一个注释:常量值必须与属性具有相同的数据类型,以便过滤器返回有效结果。有关支持的属性类型的详细信息,请参阅了解表服务数据模型。

在您的情况下,据我所知,对Rowkey进行分段然后对其进行过滤不是受支持运算符的选项。我建议您点击 link查看支持查询的完整文档。

答案 1 :(得分:0)

我假设您希望按日期时间进行搜索,因此您可以将日期时间值放在GUID前面,以使行键成为" 2518908336099522182_b844be0d-2280-49f7-9ad7-58c36da80d22& #34;

接下来,当您的搜索可以表达为:

var filters = TableQuery.CombineFilters(
                    TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "Smith"),
                    TableOperators.And,
                    TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.GreaterThanOrEqual, "2518908336099522182"));

    filters = TableQuery.CombineFilters(filters, TableOperators.And, TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.LessThanOrEqual, "2518908336099522182"));

                TableQuery<CustomerEntity> rangeQuery = new TableQuery<CustomerEntity>().Where(filters);

希望这有帮助