C# 仅在迭代时从Api获取结果
我有一个Api,它在页面中获取结果并将结果发送回客户端。在知道客户机将如何实际迭代我的项目之前,如何最大限度地减少从api获取的页面数量。也就是说,一个客户只接受5件食物。我的api当前将获取所有页面,即使客户端只使用了5项。除了传递要提取的项目数量之外,还有别的方法吗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
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,我会用它更新答案。即使你不能投票,你也应该能够通过投票箭头下的复选标记“接受”答案。再次感谢你的回答是正确的!!我接受了