Добавление результатов пакетного запроса GET в список с использованием Simple.Odata.Client - PullRequest
0 голосов
/ 11 мая 2019

Используя Simple.Odata.Client, я пакетирую запросы GET и добавляю результаты этих запросов в список. Как ниже:

        var results = new List<Thing>();
        var ids = new List<long>() { 1, 2, 3, 4, 5, 6 };

        var batch = new ODataBatch(_client);

        foreach (var id in ids)
        {
            batch += async c =>
            {
                results.Add(await c.For<Thing>().Key(id).FindEntryAsync());
            };
        }

        await batch.ExecuteAsync();

Проблема в том, что (как описано здесь - https://github.com/simple-odata-client/Simple.OData.Client/issues/181) обработчик пакета вызывается дважды, что означает, что для каждого успешного результата, добавляемого в список результатов, также добавляется нулевое значение.

Говорят, что решением было «убрать все операторы, не связанные с пакетными операциями (например, results.Add (...)) из пакетной лямбды». Однако я не понимаю, как это можно сделать, потому что у меня нет доступа к результату пакетного запроса за пределами лямбды. Я понимаю, что решение было бы проверить нулевое значение перед добавлением результата в список результатов, но я хотел бы посмотреть, если кто-нибудь знает лучший способ, или может объяснить, как добавить результаты за пределами пакетного лямбда. Спасибо:)

1 Ответ

0 голосов
/ 21 мая 2019

Собираюсь ответить на мой собственный вопрос здесь. Поскольку пакетный обработчик вызывается дважды, единственное реальное решение, которое я нашел, - это присвоить результат запроса локальной переменной в пакетной лямбде, а затем добавить этот результат в список результатов, только если результат не равен нулю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...