跳过并采取

Skip 方法返回一个集合,该集合不包括源集合开头的多个项目。排除的项目数是作为参数给出的数字。如果集合中的项目少于参数中指定的项目,则返回空集合。

Take 方法返回一个集合,该集合包含源集合开头的许多元素。包含的项目数是作为参数给出的数字。如果集合中的项目少于参数中指定的项目,则返回的集合将包含与源集合相同的元素。

var values = new [] { 5, 4, 3, 2, 1 };

var skipTwo        = values.Skip(2);         // { 3, 2, 1 }
var takeThree      = values.Take(3);         // { 5, 4, 3 }
var skipOneTakeTwo = values.Skip(1).Take(2); // { 4, 3 }
var takeZero       = values.Take(0);         // An IEnumerable<int> with 0 items

.NET 小提琴现场演示

Skip 和 Take 通常一起用于分页结果,例如:

IEnumerable<T> GetPage<T>(IEnumerable<T> collection, int pageNumber, int resultsPerPage) {
    int startIndex = (pageNumber - 1) * resultsPerPage;
    return collection.Skip(startIndex).Take(resultsPerPage);
}

警告: LINQ to Entities 仅支持跳过有序查询 。如果你试图在没有排序的情况下使用 Skip,你将得到一个 **NotSupportedException,**其中包含“方法’跳过’仅支持 LINQ to Entities 中的排序输入。方法’OrderBy’必须在方法’Skip’之前调用。”