使用Simple.Odata.Client

时间:2019-05-11 04:34:03

标签: c# lambda odata

使用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)批处理程序被调用了两次,这意味着对于添加到结果列表中的每个成功结果,也将添加一个空值。

据说该解决方案是“将与批处理操作无关的所有语句(如result.Add(...))移出批处理lambda。”但是我不知道该怎么做,因为我无法在lambda之外访问批处理请求的结果。我知道一种解决方案是在将结果添加到结果列表之前检查null,但我想看看是否有人知道更好的方法,或者可以解释如何在批处理lambda之外添加结果。谢谢:)

1 个答案:

答案 0 :(得分:0)

在这里回答我自己的问题。因为批处理程序被调用了两次,所以我发现的唯一真正的解决方案是将查询结果分配给批处理lambda中的局部变量,然后仅在结果不为null时才将该结果添加到结果列表中。