zoukankan      html  css  js  c++  java
  • Linq To Entity 的分页讨论 jerry

    最近在使用 Linq To Entity 时,在自己程序BUG中对的分页的一些小理解。

    先来看看 什么是 Linq To Entity:

    从字面意思来看是通过Linq 来检索数据模型,那么什么又是数据模型呢?

    数据模型的概念很宽泛,在Linq to Entity 中,我们可以把它理解为数据结构的印射,直白点说,就是他的模型结构和你在数据库中指定表的结构相一致。

    相应的Linq to Entity 用白话来讲术的话,就是我们在查询数据模型,由于模型结构和你在数据库中指定表的结构相一致,所以在最底层的查询中,其实

    还是在对数据库表进行操作,Linq to entity 更多的是体现面向对象、且易理解、易维护的编程思想。

    (小弟不才,理解方面不够严谨,后续有待矫正部分用词)

    (1)、Linq To Entity 在执行查询的时候依旧就是要转换成拼接好的 SQL 语句在进行查询,修改、新增操作。

           Linq To Entity 很好的展现的面向对象的查询,例子如下:

           using (NISMemberEntities nis = new NISMemberEntities())
           {

               var query = (from m in nis.Bs_Class

                                 where m.id=100
                                 select new ClassEntity 

                                 {

                                          ID=m.id,

                                          Name= m.Name

                                  } ).FirstOrDefault();

            }

            在读这段代码的时候,给开发者的直观感觉就是,数据表成为了一个对象集合,而且我们只是从这个集合中取我们想要的对象。

    (2)、我在这里想描述的重点是 Linq to Entity 的分页

            using (NISMemberEntities nis = new NISMemberEntities())
           {

               var query = (from m in nis.Bs_Class

                                 where m.id=100

                                 orderby m.id descending
                                 select m).Skip(startRowIndex).Take(maximumRows);

            }

            这是一个简单的分页,startRowIndex为查询的起始索引,maximumRows为要显示的条数。(注意,要分页的话,必需要排序,即有orderby语句)

            要注意了,这个查询没有条件,我们给它加点条件

            using (NISMemberEntities nis = new NISMemberEntities())
           {

                var query = (from m in nis.Bs_Class

                                 where m.id=100

                                 orderby m.id descending
                                 select m).Skip(startRowIndex).Take(maximumRows);

                 query = query.where(r=>r.name=="新概念");

            }

             我们初始化startRowIndex的值为30,maximumRows同样为30,即现在翻到第二页了,第一页是(1-30),第二页(30-30),前为索引,后为查询条数,

             在执行上面代码后,我们会发现第二页只显示了6条,有时候又是5条,页数据库显示第二页是有30条记录的,那么这是为什么呢?

             原因就在于,我在分页后又执行了条件过滤,即query = query.where(r=>r.name=="新概念");

             这就是说,在Linq to Entity 中,分页的执行和 条件过滤是有顺序的,即在条件过滤后在执行分页.

             在日常的开发中,习惯性的 将.Skip(startRowIndex).Take(maximumRows);放到了条件过滤之前。

             虽然是个简间的问题,但是,先记下来,当以后记。

    (3)、我们会常常把结果集返回,比如  query.ToList();

           分页一定要在ToList()前执行,我在执行程序中,感觉这样性能更快一些。至于原因,待我去发现发现。

                                                                    就写到这里,谢谢大家,祝好。

                      

  • 相关阅读:
    Window黑客编程之资源释放技术
    实战|一个表白墙引发的“血案”
    【T1543.003】利用 ACL 隐藏恶意 Windows 服务
    exe调用DLL的方式
    要点4:C的文件操作
    regsvr32 bypass windows defender 新思路
    使用Zolom内存解析运行python脚本(不落地)
    在不影响程序使用的情况下添加shellcode
    要点2:循环、条件控制
    要点3:输入函数对比与自定义输入方式
  • 原文地址:https://www.cnblogs.com/mbailing/p/1879814.html
Copyright © 2011-2022 走看看