【问题标题】:LINQ and pagination [duplicate]LINQ和分页[重复]
【发布时间】:2011-09-05 07:45:19
【问题描述】:

我们需要使用 LINQ 从数据库中获取数据。我们现在需要实现分页。

我想我们需要一次获取10 记录,当我们单击“下一步”按钮时,它将从数据库中获取下一个10 记录。

请用代码指导我。谢谢

【问题讨论】:

    标签: c# linq-to-sql


    【解决方案1】:

    我总是使用以下代码:

    public static class PagingExtensions
    {
        //used by LINQ to SQL
        public static IQueryable<TSource> Page<TSource>(this IQueryable<TSource> source, int page, int pageSize)
        {
            return source.Skip((page - 1) * pageSize).Take(pageSize);
        }
    
        //used by LINQ
        public static IEnumerable<TSource> Page<TSource>(this IEnumerable<TSource> source, int page, int pageSize)
        {
            return source.Skip((page - 1) * pageSize).Take(pageSize);
        }
    
    }
    

    这是一个静态类,您可以将其包含在源代码中。 添加此类后,您可以执行以下操作:

    MyQuery.Page(pageNumber, pageSize)
    

    【讨论】:

    • 哇,太好了,谢谢:D
    • 请注意,在 LINQ to SQL 中,您必须先对输入进行排序。
    • 用作常用的扩展方法。
    • 这仅在第 1 页是您的起始页时才有效。如果要从第一页的页码 0 开始,请从页面中删除 -1。就这样:return source.Skip(page * pageSize).Take(pageSize);
    【解决方案2】:

    LINQ Take() 函数将限制获取的项目数。 Skip() 函数将忽略前 n 项。这样的事情可能会起作用:

    myDataSource.Skip(pageSize * curPage).Take(pageSize)
    

    【讨论】:

    • .Skip(pageSize * (curPage -1)).Take(pageSize) 用于寻呼机
    【解决方案3】:

    可以使用.Skip和.Take扩展方法:

    var result = (from c in Customers
                  select new 
                  {
                      c.City,
                      c.ContactName
                  }
                  ).Skip(5).Take(5);
    

    【讨论】:

    • 非常简单!感谢您的信息! :)
    猜你喜欢
    • 1970-01-01
    • 2012-11-25
    • 2020-12-01
    • 2018-08-24
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    • 1970-01-01
    • 2011-02-27
    相关资源
    最近更新 更多