从ID列表中计算页码

时间:2012-05-15 13:57:24

标签: c#

我正在分页一些数据,我有一个long列表,其中包含数据集中每个元素的ID。现在,我有这样的事情:

List<long> TheListOfIDs = {23,435,6635,4224,546,756,23,542....};

TheListOfIDs实际上包含数千个ID。每页数据包含20个元素。我正在编写一个接收long的函数,并返回ID所在的页码。例如,在示例数据中,ID号435位于第二位,因此它是前20个元素的一部分,因此它位于第1页。

如果我写

int ThePageNumber = TheListOfIDs.IndexOf(TheID) / 20;

这会在所有情况下都有效吗?

更新编辑:列表中的每个元素都是唯一的,并且函数中传递的ID肯定在列表中!

4 个答案:

答案 0 :(得分:0)

我建议编写不同案例的单元测试。我想到的是:

  • 首页的第一页
  • 最后一页
  • 首页中间
  • 中间页面的第一页
  • 中间页的最后一页
  • 中间页面中间

如果您的代码通过了这些测试,我认为您没问题。

答案 1 :(得分:0)

您应该检查id列表中不存在id的情况。 这是Java代码:

public int getPage(List<Long> ids, Long id)
{
    int index = ids.indexOf(id);
    if (index == -1) 
        return -1; // the id does not exist in the list
    return (index / 20) + 1; // the page number should start from index 1
}

答案 2 :(得分:0)

使用MoreLinqBatch

var pagebatches = TheListOfIDs.Batch(20);

pagebatches的元素最多包含20个项目。每个项目对应一个页码。

pagebatches的最后一个元素可能包含剩余的项目(&lt; = 20)。

答案 3 :(得分:0)

你说位置2在第1页,但是2/20 = 0,所以不,它不起作用。

但你可以做到

int ThePageNumber = (TheListOfIDs.IndexOf(TheID) + NumIDsInEachPage - 1) / NumIDsInEachPage ;