关于LINQ TO SQL的问题。请大家指点

a21999 2009-12-23 11:45:49
使用LINQ TO SQL,是如何分页的?当然,TO其他的东西也一样。

-----------
那么,在执行查询的过程中是否包含了缓存?或者说启用缓存功能?
如果没有,就是要自己把查询结果加入到缓存中去?

-----------
如果应用在SQL SERVER 2000 , 2005 , 2008三个不同时代的数据库上,
效率是否会根据版本的新旧而得到某些可观的提升?




希望大家指点迷津,谢谢。
分数给的有点少,朋友们别介意。。。我想给300,系统不让。。。
...全文
151 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
a21999 2009-12-24
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 yxj19871219 的回复:]
linq实现的分页的方法很多的!
[/Quote]
希望你给出一种完整的解决方法,以供大家参考,学习。
烟灰洒落键盘 2009-12-24
  • 打赏
  • 举报
回复
linq实现的分页的方法很多的!
a21999 2009-12-24
  • 打赏
  • 举报
回复
为什么是博客园?

如果有比较优秀的解决方案,希望你能提供出来,大家参考参考。
chen_ya_ping 2009-12-24
  • 打赏
  • 举报
回复
楼主关于你的问题,我想你去博客园上肯定有你的答案
comzheng 2009-12-24
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 a21999 的回复:]
那么,请问,每次用户加载页面,都要重新计算当前数据有多少页,有没有更好的办法?
[/Quote]
是的,每次都会计算。更好的办法我暂时不知道。
a21999 2009-12-24
  • 打赏
  • 举报
回复
那么,请问,每次用户加载页面,都要重新计算当前数据有多少页,有没有更好的办法?
comzheng 2009-12-23
  • 打赏
  • 举报
回复
LINQ分页内置了两个方法 skip和take skip是跳过多少条记录,take是取多少条。如:
var s=from n in dc.news select n;
return s.skip(10).take(20);//即跳过10条,取20条。

LINQ它是延迟查询 ,也就是当你需要数据的时候它才会去查询数据。你不需要的话它是不会执行的。

性能问题有所影响。不过大大的减少了代码量。

以上是我个人认为,我也是菜鸟。说错之处抱歉了。
三碗猪脚 2009-12-23
  • 打赏
  • 举报
回复
也在学习和使用LINQ,但性能还没有思考过,网上的评论有好有坏。。

机制还不是很清楚,希望高手来解答吧
bj_kevin51 2009-12-23
  • 打赏
  • 举报
回复
进来关注学习的,linq不懂
silentwins 2009-12-23
  • 打赏
  • 举报
回复
关注!
zhulong1111 2009-12-23
  • 打赏
  • 举报
回复
mark
a21999 2009-12-23
  • 打赏
  • 举报
回复
沙发自己占了,希望朋友们给出代码。
也希望一起测试一下,在不同数据库上,是否有大的性能提升。
comzheng 2009-12-23
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 a21999 的回复:]
8楼头像好漂亮。
9楼说的有点道理,SQL SERVER 2008我正在安装中。。。有待测试。。。不会又回到top吧?
9楼的朋友,如果要直接访问最后一页数据,如何访问呢?提前计算好分多少页?
寒一个,代码我还不会写,你辛苦一下,写几行。。。

10楼的rovecat,指定列。。。可以在select或者 new里面做做手脚麻。
[/Quote]
是的,提前就要计算好多少页,拿上面的代码。如
var data=from s in dc.news select s;
PagerptCourse.RecordCount=data.Count();//此处就是获取记录数,我用的是aspnetpager控件分页
rptOperate.DataSource = data.Skip((PagerptCourse.CurrentPageIndex - 1) * PagerptCourse.PageSize).Take(PagerptCourse.PageSize);
rptOperate.DataBind();
比如最后一页是18页,那么pageindex就为18,假设每一页为20条记录,则
rptOperate.DataSource = data.Skip((18 - 1) * 20).Take(20);
这样就是取最后一页的记录了。


2008会不会回到top的问题:其实2005也不是每次生成的SQL都是row的那种,它也有可能会生成top的。但在哪种情况下我也不太清楚。我没测试过。
jshi123 2009-12-23
  • 打赏
  • 举报
回复
1. Linq比SqlDataAdapter大概慢10%左右
2. 当使用SQL 2005时,LINQ to SQL将会在数据库中使用ROW_NUMBER()这个SQL函数来执行分页逻辑,效率提高

Linq查询与性能解析
LINQ To SQL实验数据比较
Linq to Sql与NHibernate数据库操作性能对比
a21999 2009-12-23
  • 打赏
  • 举报
回复
居然打错了一个字,杯具了。。。
a21999 2009-12-23
  • 打赏
  • 举报
回复
8楼头像好漂亮。
9楼说的有点道理,SQL SERVER 2008我正在安装中。。。有待测试。。。不会又回到top吧?
9楼的朋友,如果要直接访问最后一页数据,如何访问呢?提前计算好分多少页?
寒一个,代码我还不会写,你辛苦一下,写几行。。。

10楼的rovecat,指定列。。。可以在select或者 new里面做做手脚麻。
三碗猪脚 2009-12-23
  • 打赏
  • 举报
回复
问个弱弱的问题,需要指定列怎么办
comzheng 2009-12-23
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 a21999 的回复:]
skip和take两个方法还是知道的。
那么,它有没有内置的cache机制?


在针对尾页处理的时候,用linq to sql怎么做呢?会不会出现丢失数据的现象。。。
莫非,也要统计分了多少页?


还有个疑问,如果是2000数据库,直接生成top语句去查询,
如果换成2005,是否会自动调用内置的新的分页函数呢?
要是换成2008,是不是还会有所改变?


啊!!!希望给出一个经典的代码,大家都学习一下。。。
要是有朋友在项目中实战过,有数据测试就更好了。。。



[/Quote]
不会出现丢数据的情况啊。
rptOperate.DataSource = data.Skip((PagerptCourse.CurrentPageIndex - 1) * PagerptCourse.PageSize).Take(PagerptCourse.PageSize);
rptOperate.DataBind();

2000的数据库是top 2005的数据会生成rownumber(好像打错了),2008我没用过
Lovely_baby 2009-12-23
  • 打赏
  • 举报
回复
var result=from pdt in db.Product
select pdt;
this.dataview.DataSource=result.Skip(10).take(10);
this dataview.DataBind();

这种方式不行??
先全部拿出数据 在分页~~
a21999 2009-12-23
  • 打赏
  • 举报
回复
skip和take两个方法还是知道的。
那么,它有没有内置的cache机制?



在针对尾页处理的时候,用linq to sql怎么做呢?会不会出现丢失数据的现象。。。
莫非,也要统计分了多少页?


还有个疑问,如果是2000数据库,直接生成top语句去查询,
如果换成2005,是否会自动调用内置的新的分页函数呢?
要是换成2008,是不是还会有所改变?


啊!!!希望给出一个经典的代码,大家都学习一下。。。
要是有朋友在项目中实战过,有数据测试就更好了。。。


360等软件会报安全未知软件,允许执行。 v1.1.2014.10更新 1、增加了表表之间的关系,通过外键关系的实体类访问更方便 2、增加了DAL的Insert函数。其它基本操作在后续版本中实现. 3、增加了部分表、字段的中文注释功能等; 4、修正了一部分错误; 5、增加一个简单的示例; 软件件适用: 1、根据SQL数据库生成实体文件类,类似于SqlMetal和动软代码生成器,但是相比较SqlMetal简化了较多的不常用的函数(我认为的),成员变量支持数据库字段注释,一个表对应一个文件,不像sqlmetal如果数据库表和字段多了,一下生成几千行一个文件。 2、数据库操作采用的LINQ TO SQL,小规模的应当问题不大吧,实现了INSERT,UPDATE,EXIST,GET方法。DELETE比较简单,自己写吧,写在LINQ里面,我觉得不划算。 3、相比较动软代码生成器,生成代码除系统组件(System命名空间)外,不调用任何第三方组件。 4、可以做B\S的,也可以做C\S的,生成的示例以B\S。 5、纯绿色软件,无需要安装,而且只有一个文件! 运行环境: 1、64位操作系统,32位的没有测试过。需要.net fromwork4.0支持,当然还要一个数据库才能生成。 2、数据库SQL2008Express版本以上,高于此版本应当当没有问题。低于此版本,我只能呵呵的,说不定可以…… 3、数据库配置方式引用了Discuz!NT的做法,没有写在Web.Config文件里面。稍作修改你可以完全写出其它类似的配置文件。可惜,Discuz!NT现在不做了!在此深表怀念! 4、建议每个表都要定义主键或唯一键,建立索引否则生成的LINQ语句将无法完成查询。 v1.1.2014.10程序校验码: MD5 :3F7BE759F0BE7E86236620D57D4472FE SHA1 :69BABBBA33D516FA1AD0068F44C145989103FB4B CRC32 :EAD371EA 如果需要交流,加群:点软件上面的QQ直接加哦! 本软件适用开发小软件吧,大软件不知道性能怎么样,欢迎高手指点

62,254

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧