c# - 如何在列表上应用分页

标签 c# list

我有一个函数可以从数据库中检索数据并将其添加到列表中。我的列表已准备就绪并显示数据,但我想对该列表进行分页,以便每页显示有限的记录。但不知道该怎么做。
这是我的数据层函数代码。

 public List<demodto> executereader(List<demodto> Ldemo,SqlCommand cmdshow, string tablename)
    {
         SqlConnection cn;
         try
         {
             cn = this.getconnection();

             cmdshow.Connection = cn;
             cn.Open();

             SqlDataReader rd = cmdshow.ExecuteReader();
             while (rd.Read())
             {
                 demodto dtoobj1 = new demodto();
                 dtoobj1.ID = Convert.ToInt32(rd[0].ToString());
                 dtoobj1.Name = rd[1].ToString();
                 dtoobj1.PhNo = Convert.ToInt32(rd[2].ToString());
                 dtoobj1.Address = rd[3].ToString();
                 dtoobj1.Gender = rd[4].ToString();
                 dtoobj1.Email = rd[5].ToString();
                 dtoobj1.Emptype = rd[6].ToString();

                 Ldemo.Add(dtoobj1);

             }
             cn.Close();
             return Ldemo;
         }
         catch (Exception ex2)
         {
             throw new DataException("error....." + ex2.Message);

         }

    }

这是针对 DTO 类的..

 public class demodto
{
    public Int32 ID{get;set;}
    public string Name{get;set;}
    public Int32 PhNo { get; set; }
    public string Address{get;set;}
    public string Gender { get; set; }
    public string Email { get; set; }
    public string Emptype { get; set; }
 }

请帮帮我。谢谢。

最佳答案

您可以使用 LINQ 对列表进行分页,如下所示:

IList<demodto> GetPage(IList<demodto> list, int page, int pageSize) {
    return list.Skip(page*pageSize).Take(pageSize).ToList();
}

例如,假设每个页面有 50 条记录。要获取第三页,请调用

IList<demodto> thirdPage = GetPage(dataList, 3, 50);

但是请注意,对内存中的数据应用分页没有什么意义:分页背后的想法是减少从数据库中检索数据所需的时间,并通过仅保留单个数据来节省一些内存页面,这不会发生在您的情况下,因为所有数据都是一次检索的。

为了使分页值得付出努力,您需要将其移动到数据库中。更改您的方法以接受页面大小和页数,并使用它们更改 SQL 以检索单个页面的列表。不要忘记强制对您的 sql 读取进行排序,否则相同的数据可能会出现在不同的页面上。您的 SQL 需要修改以支持分页。这取决于您的数据库。描述了 MS SQL Server 解决方案 in this answer .

关于c# - 如何在列表上应用分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21362144/

相关文章:

Python 导入文本文件作为列表进行迭代

c# - WPF 一个像素宽的线有时会消失

c# - 无法将 QuickTime 控件添加到 Visual Studio 中的 Windows 窗体项目

c# - 具有变量 StandardValues 的自定义 TypeConverter

c# 泛型列表

python - str(list) 如何工作?

c# - ComboBox TwoWay 绑定(bind)不起作用

c# - 参数为空时如何解决歧义?

java - 用 Java 打印列表?

python - 跟踪Python元组中值的增量和减量