@embiid

Как пройтись несколько раз циклом?

Работаю с интеграцией страйпа. И мне нужно вывести все пейменты которые совершал пользователь.
У страйпа нет такого функциона где он может вывести все операции что были проведенны.
Для этого существует StartingAfter пропертя, зависиющий от HasMore.
Теперь вопрос => как мне и куда вписать цикл, таким образом что бы выписались все возможное количество?

string stripeKey = "KEY";

            StripeConfiguration.ApiKey = stripeKey;

            List<PaymentMethod> entities = new List<PaymentMethod>();

            var options = new PaymentMethodListOptions
            {
                Customer = "NUM",
                Type = "card",
                Limit = 100
            };

            var service = new PaymentMethodService();
            StripeList<PaymentMethod> paymentMethods = service.List(options);

            string startingAfter = string.Empty;

            foreach (var item in paymentMethods)
            {
                options.StartingAfter = startingAfter;

                if (paymentMethods.HasMore == true)
                {
                    var lastEntity = paymentMethods.Data.LastOrDefault();
                    startingAfter = lastEntity.Id;

                    options.StartingAfter = startingAfter;
                }

                entities.Add(item);
            }
  • Вопрос задан
  • 66 просмотров
Решения вопроса 2
freeExec
@freeExec
Участник OpenStreetMap
Обычно такой подход пагинации выглядит как
while (paymentMethods.HasMore)
{
     var lastEntity = paymentMethods.Data.LastOrDefault();
     entities.Add(lastEntity);
     options.StartingAfter = lastEntity.Id;
}
Ответ написан
Комментировать
vabka
@vabka Куратор тега C#
Токсичный шарпист
Используй цикл while чтобы запрашивать новые данные, пока есть HasMore.
А при помощи foreach занимайся перекладыванием.

Что-то типа
var allPaymentMethods = new List<PaymentMethod>();
StripeList<PaymentMethod> paymentMethodsList;
var options = new PaymentMethodListOptions
            {
                Customer = "NUM",
                Type = "card",
                Limit = 100
            };
do {
  paymentMethodsList = service.List(options)
  allPaymentMethods.AddRange(paymentMethodsList);
  var lastItem = allPaymentMethods.Last();
  options.StartingAfter = lastItem.Id;
} while(paymentMethodsList.HasMore);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы