使用Linq检索页面结果

本文关键字:结果 检索 Linq 使用 | 更新日期: 2023-09-27 18:13:26

我想从linq的结果集中获得50-100项。我怎么做呢?

情况:我得到最后一个结果集最后一项的索引。然后我想抓住下一个50。我没有最后一个结果的ID,只有它的索引号。

使用Linq检索页面结果

你按某样东西来订购,否则你真的不能

就像

mycontext.mytable
    .OrderBy(item=>.item.PropertyYouWantToOrderBy)
    .Skip(HowManyYouWantToSkip)
    .Take(50);

LINQ基于单向枚举的概念,因此查询都从开头开始。要实现分页,您必须使用SkipTake扩展来隔离您感兴趣的项:

int pageSize = 50;
// 0-based page number
int pageNum = 2;
var pageContent = myCollection.Skip(pageSize * pageNum).Take(pageSize);

当然,这只是设置了一个IEnumerable<T>,当枚举时,它将遍历myCollection 100次,然后在关闭前开始返回50步的数据。

如果您正在处理可以多次枚举的内容,这是可以的,但如果您正在处理只能枚举一次的源,则不是这样。但是,无论如何,您无法在这种枚举上实际实现分页,您需要一个中间存储空间,至少可以存储您已经使用的那一部分。

在LINQ to SQL中,这将导致一个查询,试图只选择你所要求的50条记录,这将基于从内存中获取numSkip + numTake记录,逆转排序顺序,获取numTake记录并再次逆转。根据您设置的排序顺序和所涉及的数字的大小,这可能是一个比简单地提取一堆数据并在内存中过滤它要昂贵得多的操作。