为了账号安全,请及时绑定邮箱和手机立即绑定

使用LINQ为对象分页

使用LINQ为对象分页

摇曳的蔷薇 2019-08-27 10:29:26
如何在LINQ查询中实现分页?实际上,如果可以模仿sql TOP函数,我会感到满意。但是,我确信无论如何都需要尽快提供完整的分页支持。var queryResult = from o in objects                  where ...                   select new                       {                          A = o.a,                          B = o.b                      }                    ????????? TOP 10????????
查看完整描述

3 回答

?
郎朗坤

TA贡献1921条经验 获得超9个赞

使用SkipTake绝对是要走的路。如果我实现这个,我可能会编写自己的扩展方法来处理分页(使代码更具可读性)。实施当然可以使用SkipTake

static class PagingUtils {
  public static IEnumerable<T> Page<T>(this IEnumerable<T> en, int pageSize, int page) {
    return en.Skip(page * pageSize).Take(pageSize);
  }
  public static IQueryable<T> Page<T>(this IQueryable<T> en, int pageSize, int page) {
    return en.Skip(page * pageSize).Take(pageSize);
  }}

该类定义了两个扩展方法 - 一个用于IEnumerable和一个用于IQueryable,这意味着您可以将它与LINQ to Objects和LINQ to SQL一起使用(编写数据库查询时,编译器将选择IQueryable版本)。

根据您的分页要求,您还可以添加一些其他行为(例如,处理负数pageSizepage值)。以下是如何在查询中使用此扩展方法的示例:

var q = (from p in products         where p.Show == true
         select new { p.Name }).Page(10, pageIndex);


查看完整回答
反对 回复 2019-08-27
  • 3 回答
  • 0 关注
  • 415 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信