Linq To Entity 的分页讨论
最近在使用 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()前执行,我在执行程序中,感觉这样性能更快一些。至于原因,待我去发现发现。
就写到这里,谢谢大家,祝好。
转载于:https://www.cnblogs.com/mbailing/archive/2010/11/17/1879814.html
Linq To Entity 的分页讨论相关推荐
- Entity framewrok (linq to entity)查询优化的一点摸索
对于linq to entity 生成的复杂sql语句相信已经困扰大家很久了,本人也是.从接触实体框架到现在,一直都是边学边用,用啥学啥,没有系统的学习过.同时所接触项目也对性能方面没什么要求,所以本 ...
- linq to object 、linq to sql 、linq to entity 批量 新增、更新、删除功能扩展
最近在codeplex上找到了一个功能比较全的linq to object .linq to sql .linq to entity新增.修改.删除功能扩展的控件--magiq. 以linq to s ...
- linq to entity 左联接 右连接 以及内连接写法的区别(转)
linq to entity 左连接 右连接 以及内连接写法的区别 还有就是用lambda表达式怎么写,那个效法效率高些? [解决办法] 左连右连还是内连这个其实你不需要关心.只需要根据实体的映射关 ...
- Entity Framework (EF)/Linq To entity/ ESQL(entity sql)区别 ADO.NET Entity Framework:来自微软官方的ORM框架
长久以来,程序员和数据库总是保持着一种微妙的关系,在商用应用程序中,数据库一定是不可或缺的元件,这让程序员一定要为了连接与访问数据库而去学习 SQL 指令,至少对于我而言,我觉得这是一个很不爽的事情. ...
- Linq to Entity中连接两个数据库时要注意的问题
Linq to Entity中连接两个数据库时要注意的问题 今天大学同学问了我一个问题,Linq to Entity中连接两个数据库时,报错"指定的 LINQ 表达式包含对与不同上下文关联的 ...
- Webform(Linq高级查、分页、组合查询)
一.linq高级查 1.模糊查(包含) 1 public List<User> Select(string name) 2 { 3 return con.User.Where(r => ...
- linq to entity 基础
部分摘抄 http://www.cnblogs.com/nikymaco/archive/2012/07/11/2585594.html linq(语言集成查询)在对象领域和数据领域之间架起了一座桥 ...
- 在Linq to Entity 中使用lambda表达式来实现Left Join和Join
1.读取用户和部门两个表的左连接: var sg = db.Users.GroupJoin(db.Departments, u => u.DepartmentId, d => d.Depa ...
- LINQ TO ENTITY 根据Birthday获取Age
from emp in EmployeeInfo let years = EntityFunctions.DiffYears(emp.Birthday.Value,DateTime.Now) let ...
最新文章
- python中numpy数组和字符串互转(互转后数据完全一致)
- python pandas读取excel-Python使用Pandas读写EXCEL文件教程
- UA MATH564 概率不等式 QE练习题
- 使用Visual Studio 创建新的Web Part项目
- SQLServer2008设置 开启INTERNET远程连接(转)
- LINUX移植——内核移植(一)
- 关于绕开百度文库复制限制的那档子事
- 关于“商用超极本应用体验分享沙龙”的体验之旅——商用超极本的崛起之路、真机实测、优缺点分析与使用评价
- MYSQL 数据库的常用语句
- ET城市大脑出海:阿里云发展世界级创新技术业务
- grandMA2onPC控制UE4灯光
- doc 问卷调查模板表_问卷调查Word模板.doc
- php 中mb开头什么意思,mb是兆的意思吗
- php smtp.163 端口号,常用的邮箱服务器(SMTP、POP3)地址、端口
- 请问论文开题报告和提纲怎么写?
- 深度学习在训练时对图片随机剪裁(random crop)
- 麻姑山行,记南城麻姑山一日游
- 用python抢火车票
- 想装吗?看看装B大全
- 老师计算机组合照说说,有关于老师的说说句子
热门文章
- 长途货运4大痛,Uber新上的「自动驾驶卡车」如何改善?
- 炸了!这届ICLR论文被指太“渣”?Goodfellow围追堵截要说法
- 浏览器事件循环机制与Vue nextTick的实现
- Application Architecture Guide 2.0 - CH 19 - Mobile Applications(2)
- python manage.py startapp app 时候报错No module named _sqlite3
- 综述:全国软考首遭试卷丢失 20万考生措手不及
- 制作本地yum镜像站
- MongoDB学习笔记lt;七gt;
- Hibernate入门案例及增删改查
- RequireJS对文件合并与压缩实现方法