如何从列表中的每5个项目

我有8项的列表。

我需要从列表中的每5个项目

我试过的代码:

lstRules.ToList() .GetRange(((currentPage - 1) * pageSize + 1) - 1, (currentPage * pageSize));

如果CurrentPage = 1 and Pagesize = 5则aove代码工作正常因为在这里我过的(0,5)的范围...

和如果CurrentPage = 2 and PageSize = 5则引发错误象下面这样:

“偏移量和长度分别出界的阵列或计数大于从索引元件的源集合的末尾的数量更大的”

我知道这会发生错误,因为我只有3列表中的项目,我传递的范围(5,5)所以,我得到这个错误..

在这里我的问题是如何解决这个问题?

是否有任何其他方式来获得从列表中的数据?

--------------解决方案-------------

你可以做soemthing是这样的:

如果您有当前pageNumber ,知道每页多少条记录定义: recordsPerPage ,通用查询是这样的

var currentPageData = lstRules.ToList().
Skip(pageNumber * recordsPerPage).Take(recordsPerPage);

使用LINQ来代替:

var data = lstRules.Skip(pageNumber * pageSize).Take(pageSize);

或者,您可以使用已做的工作适合你,如PagedList库。

要做到这一点,最好的办法就是使用类似Batch从方法MoreLinq

这使您可以在分区顺序的项目到指定的大小批量。

如果你想要一个简单的方法,并不需要是线程安全的(即你不需要与使用Parallel.ForEach()为例),那么你可以使用下面的扩展方法。

它可以生产所有批次不调用跳过多次的优势:

public sealed class Batch<T>
{
public readonly int Index;
public readonly IEnumerable<T> Items;

public Batch(int index, IEnumerable<T> items)
{
Index = index;
Items = items;
}
}

public static class EnumerableExt
{
// Note: Not threadsafe, so not suitable for use with Parallel.Foreach() or IEnumerable.AsParallel()

public static IEnumerable<Batch<T>> Partition<T>(this IEnumerable<T> input, int batchSize)
{
var enumerator = input.GetEnumerator();
int index = 0;

while (enumerator.MoveNext())
yield return new Batch<T>(index++, nextBatch(enumerator, batchSize));
}

private static IEnumerable<T> nextBatch<T>(IEnumerator<T> enumerator, int blockSize)
{
do { yield return enumerator.Current; }
while (--blockSize > 0 && enumerator.MoveNext());
}
}

而你使用它,如:

var items = Enumerable.Range(100, 510); // Pretend we have 50 items.
int itemsPerPage = 20;

foreach (var page in items.Partition(itemsPerPage))
{
Console.Write("Page " + page.Index + " items: ");

foreach (var i in page.Items)
Console.Write(i + " ");

Console.WriteLine();
}

但是如果你需要线程安全的分区,使用MoreLinq批次方法我上面链接。

您可以使用Take

lstRules.Take(5);

分类:C# 时间:2015-03-14 人气:0
本文关键词: LINQ,集合名单
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.594 (s). 10 q(s)