C#中的自动分页功能

时间:2013-06-07 10:03:52

标签: c#

我对流程感到困惑。我有一个学生对象列表。

List<Student> StudentLists;

最初,我将在列表中拥有10个学生对象。

C#4.0 winform中有一个按钮,当我点击按钮时,

我需要从列表中取出前3个学生对象并调用wcf服务并发送 这三个学生反对wcf服务。

我已经实现了wcf回调功能。

处理完网络服务后,我会收到3个学生对象的回电结果。

每次回电可能会在不同时间发生。

一旦我从webservice获得了所有三个回调结果,我想接下来的3个可用 学生对象并进行相同的Web服务调用...

我想这样做,直到它处理列表中的所有10个项目。

但我知道每次从列表中取出3个对象。这就像传呼。

var students = StudentLists.Skip(skip).Take(3).ToArray();

但我每按一次按钮就会这样做。在每个按钮单击中,我将接下来的3个对象。

有没有办法在不点击按钮的情况下完成所有这些步骤?

1 个答案:

答案 0 :(得分:3)

好像你想要批量处理学生,如果是这种情况你可以写一个扩展方法来做到这一点:

public static IEnumerable<IEnumerable<T>> Batch<T>(this IEnumerable<T> items, int batchSize)
{
    return items.Select((item, inx) => new { item, inx })
                .GroupBy(x => x.inx / batchSize)
                .Select(g => g.Select(x => x.item));
}

用法:

foreach (var batch in StudentLists.Batch(3))
{
      //Do something with batch
      //Process
      //Get result etc...
}