我有一个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;
}
答案 0 :(得分:1)
您可以通过逐一得出结果来将其转变为适当的可枚举方法。
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接口的优势,它在后台创建了一个状态机,用于跟踪循环的当前状态(如果需要详细说明,可以在SO或MSDN上搜索它)。 / p>