Хранилище таблиц Azure — поиск по RowKey, который заканчивается определенной строкой

Я использую хранилище таблиц 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».

Здесь нет оператора «Содержит», который может помочь. Что мне сделать, чтобы он работал для фильтрации типа «EndsWith»?


person puneet    schedule 15.03.2018    source источник


Ответы (2)


Я предполагаю, что вы хотите выполнять поиск по дате и времени, поэтому вы можете поместить значение даты и времени перед своим 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);

Надеюсь это поможет

person Toan Nguyen    schedule 15.03.2018
comment
Я не могу изменить порядок так, как вы указали, потому что в его нынешнем виде он используется так, как вы показали в своем коде. Если я изменю порядок, существующий код станет недействительным. Мне нужна логика endwith, я уже реализовал startwith - person puneet; 19.03.2018
comment
@Toan Nguyen будет игнорировать руководство при запросе больше или меньше? - person Rusty; 03.02.2020
comment
@ Расти Да. Сравнение основано на тексте, поэтому сопоставление начинается с начала. - person Toan Nguyen; 03.02.2020

Примечание: свойства PartitionKey и RowKey имеют тип String, вы можете отфильтровать содержимое с помощью $filter или путем фильтрации по PartitionKey и Rowkey как следует:

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

Еще одно примечание: постоянное значение должно иметь тот же тип данных, что и свойство, чтобы фильтр возвращал действительные результаты. Дополнительные сведения о поддерживаемых типах свойств см. в разделе Общие сведения о модели данных службы таблиц.

В вашем случае, насколько я знаю, сегментация Rowkey, а затем фильтрация по нему не является вариантом поддерживаемых операторов. Я рекомендую проверить это ссылка для получения полной документации по поддерживаемым запросам.

person Adam Smith - Microsoft Azure    schedule 15.03.2018