1

我正在使用 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,分隔符 (_) 之后的第二部分是时间标记。

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

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

4

2 回答 2

0

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

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

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

在您的情况下,据我所知,对 Rowkey 进行分段然后对其进行过滤不是受支持的运算符的选项。我建议检查此链接以获取受支持查询的完整文档。

于 2018-03-15T21:13:48.550 回答
0

我假设您想按日期时间搜索,因此您可以将日期时间值放在 GUID 前面,以使行键如下所示:

2518908336099522182_b844be0d-2280-49f7-9ad7-58c36da80d22

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

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);

希望这可以帮助

于 2018-03-15T21:39:16.837 回答