解决在做数据分页时报错
大家都遇到过做数据分页吧(没遇到过就听我说一下吧,说不定以后就遇到了)。在做数据分页时控制器大概要做的流程就是:先查询到数据->计算每一页要存放数据的行数->将数据进行分页排序。如以下代码。
在这里插入图片描述
如果是上面图片中画红框里的代码的话(上图代码仅供参考),那么启动程序的时候会报一个错误,错误如下图。
这个错误的大概意思就是查询数据的时候没有给数据进行排序,下面在做分页的时候又转化为ToList的格式,所以程序会报一个错误。那究竟要怎么排序数据呢?等一下给大家说两种办法。
第一种办法就是将查询到的数据转换为ToList的格式(注意:后面用ToList()方法,前面也要用List<>的数据类型类型接收数据),然后在下面做分页的时候即使没有做数据的排序,但是程序也是不会报错的,页面也是可以做出分页的效果的。但是不建议大家用这种方法解决问题。因为一旦查询数据的时候用了ToList()的方法就会在数据分页之前把数据库里的数据提取出来,如果数据库里的数据相对比较少是可以的,但是如果遇到数据库里的表有大量的数据的话就会影响程序运行的速度。所以是不推荐大家使用这种方法解决问题的。代码如下图。
第二种办法就是用orderby将数据进行排序,这里是将数据进行了倒序的排序(注意:descending是倒序的意思相反有倒序就有正序啦!那ascending就是正序的意思),然后在下面分页的时候就可以直接将数据提取出来,这样就可以解决报错的问题啦!这样页面也是可以实现分页的效果的。这个办法其实就是在查询的时候将数据进行了排序(注意:这时候的查询且排序只是告诉了数据库要查询数据这么个请求并且将数据进行了排序而已,实际上数据库的数据还是没有被提出来的),然后下面做分页的时候就可以直接提数据出来用了,这样的话既解决了报错又不会影响程序运行的速度这种问题啦!代码如下图。
这时候可能会有人问用ToList()方法只是先把数据提了出来而已啊,不是更方便吗?,为什么会影响程序运行呢?其实呢,ToList()方法先把数据库的数据全部提取出来这是没有问题的,但是这时候的程序并有没有真的要用到这些数据,这时候只是做到查询数据就好了,只有分页的时候才用到了这些数据,先提出来只会浪费了内存,如果数据相对比较少的话影响是不特别大的,但是一旦遇到了数据库里有大量的数据的话就是影响到了程序的运行速度了。所以的话不是很推荐大家用ToList()方法解决上面的错误问题的。