gpt4 book ai didi

c# - 迭代时只从 Api 获取结果

转载 作者:太空宇宙 更新时间:2023-11-03 12:08:01 25 4
gpt4 key购买 nike

我有一个 Api 可以在页面中获取结果并将它们发送回客户端。在知道客户端将如何实际迭代我的项目之前,我如何最大限度地减少从 api 中获取的页面数量。 IE 可以说客户端只需要 5 个 Foo 项目。我的 api 当前将获取所有页面,即使客户端只使用了 5 个项目。除了传入要获取的项目数之外,还有其他方法吗?

var actualItems = _pagedApiCollection.GetItems<Foo>().Take(5).ToList();

API调用

 public IEnumerable<Foo> GetItems<Foo>()
{
public List<object> allElements = new List<object>();

do
{
currentpage = _pagedApi.GetNextPage(reqid);


allElements.AddRange(currentpage.Items);

} while (currentpage.HasNextPage);

IEnumerable<Foo> myNewEnumerable = allElements.Cast<Foo>();
myNewEnumerable;

}

最佳答案

您可以通过一个一个地生成结果,将其变成一个适当的可枚举方法。

public IEnumerable<Foo> GetItems<Foo>() {
Page currentPage;
do
{
currentPage = _pagedApi.GetNextPage(reqid);

foreach (var item in currentPage)
yield return (Foo)item;

} while (currentpage.HasNextPage);
}

您仍然需要一次获取一页,因此如果您请求 6 页,但 _pagedApi 的页面大小为 5,您将获取 2 页,而不是每个页面。这种开销可能比逐条而不是逐页获取每条记录要小得多。

这是 IEnumerable 接口(interface)的强项,它在后台创建了一个状态机,用于跟踪循环的当前状态(如果需要完整的解释,可以在 SO 或 MSDN 上搜索它)。

关于c# - 迭代时只从 Api 获取结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53893951/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com