C# 仅在迭代时从Api获取结果

C# 仅在迭代时从Api获取结果,c#,ienumerable,api-design,C#,Ienumerable,Api Design,我有一个Api,它在页面中获取结果并将结果发送回客户端。在知道客户机将如何实际迭代我的项目之前,如何最大限度地减少从api获取的页面数量。也就是说,一个客户只接受5件食物。我的api当前将获取所有页面,即使客户端只使用了5项。除了传递要提取的项目数量之外,还有别的方法吗 var actualItems = _pagedApiCollection.GetItems<Foo>().Take(5).ToList(); var-actualItems=_pagedApiCollection

我有一个Api,它在页面中获取结果并将结果发送回客户端。在知道客户机将如何实际迭代我的项目之前,如何最大限度地减少从api获取的页面数量。也就是说,一个客户只接受5件食物。我的api当前将获取所有页面,即使客户端只使用了5项。除了传递要提取的项目数量之外,还有别的方法吗

var actualItems = _pagedApiCollection.GetItems<Foo>().Take(5).ToList();
var-actualItems=_pagedApiCollection.GetItems().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 GetItems()
{
公共列表等位基因=新列表();
做
{
currentpage=_pagedApi.GetNextPage(请求ID);
等位基因.AddRange(当前页.Items);
}while(当前页hastnextpage);
IEnumerable myNewEnumerable=等位基因.Cast();
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);
}
public IEnumerable GetItems(){
页面当前页面;
做
{
currentPage=_pagedApi.GetNextPage(请求ID);
foreach(当前页面中的变量项)
收益回报(Foo)项目;
}while(当前页hastnextpage);
}
您仍然需要一次获取一页,因此如果您要求获取6页,但
\u pagedApi
的页面大小为5页,您将获取2页,而不是所有页面。这种开销可能比逐个而不是逐页获取每条记录要小得多


这是IEnumerable接口的优点,它在后台创建了一个状态机,跟踪循环的当前状态(如果需要详细解释,您可以在SO或MSDN上搜索)。

谢谢您的回答!轻微的问题是,现在项的类型为object,如何将其转换为Foo类型。以前列表中有一个Cast方法,我如何对单个对象执行该方法?谢谢,伙计,这是我一直在寻找的答案,我还不能投票,因为我没有足够的声誉。我想你解决了Cast,我会用它更新答案。即使你不能投票,你也应该能够通过投票箭头下的复选标记“接受”答案。再次感谢你的回答是正确的!!我接受了