Почему .AsTableServiceQuery() следует за токеном продолжения, когда в хранилище таблиц Azure есть $top

Я использую .AsTableServiceQuery() в вызовах Azure для получения данных.

Я также использую $top для ограничения данных, скажем, 100

Проблема в том, что запрос возвращает 100 результатов, а также дает токен x-ms-continuation-NextPartitionKey. И в то же время .AsTableServiceQuery() не заботится о том, что уже есть 100 результатов и следует за токеном продолжения, пока не достигнет конца таблицы. Какие много данных и много HTTP-вызовов позже, тайм-аут.

Есть ли другой способ обработки маркера продолжения с фильтром $top


person Eric Yin    schedule 13.08.2012    source источник


Ответы (1)


Жетоны продолжения являются типичным источником путаницы. Всякий раз, когда вы выдаете $filter или $top, лучше ожидать токен продолжения. $top — это еще один способ разбиения на страницы в таблице. Использование Linq Take(n), за которым следует .AsTableQuery(), работает так, как вы ожидаете. Нил Маккензи приводит хороший пример в своем описательном запись в блоге о том же.

CloudTableQuery<Song> cloudTableQuery =
(from entity in tableServiceContext.CreateQuery<Song>(“Songs”)
 select entity).Take(10).AsTableServiceQuery<Song>();
person IUnknown    schedule 13.08.2012
comment
Спасибо, после замены .AddQueryOption("$top", на .Take() проблема волшебным образом исчезла. - person Eric Yin; 13.08.2012