Linq 的分页讨论

简介:

废话不数,直入主题,Linq下怎么进行分页

很多学习Linq的朋友肯定有自己所不同的方法,考虑这个问题我所想到的是

用Take(),Skip(),TakeWhile(),SkipUntil()中的方法来实现

首先看Take()是否可用

Take方法的作用是从结果中取固定数量的值,

MydbDataContext mydb=new MydbDataContext("server=.;database=mydb");

var query=from p in mydb.Products
               orderby p.id descending
               select p;//取出Products中所用的项按降序排列
如果直接用take()

var q=query.take(n) 这样只能取出前条n记录,但是还是让我们看到了分页的曙光,还是还有个skip吗,skip可以取出除去满足条件的剩下的记录。如果我们要把数据以每页pagesize的数量来进行分页,很简单,很skip(pagersize*pagenum)然后在剩下的记录中take(pagesize)不就得到了想要的数据了么。

 

varq=query.skip(pagesize*pagenum).take(pagesize) 就这么简单。

希望朋友们提供更好的方法来进行分页,同时对这个方法的优劣性,进行批评指导
附上运行时生成的SQL(感谢紫色阴影 、Boler Guo )
sql server2000:
SELECT TOP 20 [t0].[CustomerID], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Address], [t0].[City], [t0].[Region], [t0].[PostalCode], [t0].[Country], [t0].[Phone], [t0].[Fax] 
FROM [dbo].[Customers] AS [t0] 
WHERE NOT (EXISTS( 
SELECT NULL AS [EMPTY] 
FROM ( 
SELECT TOP 10 [t1].[CustomerID] 
FROM [dbo].[Customers] AS [t1] 
) AS [t2] 
WHERE [t0].[CustomerID] = [t2].[CustomerID] 
)) 
sql server 2005
SELECT TOP 10 [t1].[CustomerID], [t1].[CompanyName], [t1].[ContactName], [t1].[ContactTitle], [t1].[Address], [t1].[City], [t1].[Region], [t1].[PostalCode], [t1].[Country], [t1].[Phone], [t1].[Fax]
FROM (
SELECT ROW_NUMBER() OVER (ORDER BY [t0].[ContactName]) AS [ROW_NUMBER], [t0].[CustomerID], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Address], [t0].[City], [t0].[Region], [t0].[PostalCode], [t0].[Country], [t0].[Phone], [t0].[Fax]
FROM [dbo].[Customers] AS [t0]
) AS [t1]
WHERE [t1].[ROW_NUMBER] > @p0
ORDER BY [t1].[ContactName]
-- @p0: Input Int32 (Size = 0; Prec = 0; Scale = 0) [50]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.20XXX.X





    本文转自无心之柳.NET博客园博客,原文链接:http://www.cnblogs.com/9527/archive/2007/07/05/807451.html ,如需转载请自行联系原作者

相关文章
|
缓存 监控 Unix
vmstat命令详解
`vmstat` 是类 Unix 系统的监控工具,显示虚拟内存、物理内存、CPU、I/O 和系统中断等资源使用情况。基本用法是 `vmstat [interval [count]]`,可按指定时间间隔输出系统状态。主要字段包括进程(r/b)、内存(swpd/free/buff/cache)、交换(si/so)、I/O(bi/bo)、系统(in/cs)和CPU(us/sy/id/wa/st)的统计。使用 `-s`, `-a`, `-m`, `-d`, `-p` 等选项可获取不同类型的统计信息。详细信息可通过 `man vmstat` 查看。
313 3
|
6月前
|
自然语言处理 前端开发 IDE
用通义灵码全新智能体+MCP实现从设计稿到前端代码,个人免费用
通义灵码全新升级,发布国内首个支持“自主决策+工具链闭环”的编程智能体,面向个人免费!新增功能包括智能体模式、混合推理模型Qwen3支持、全面集成MCP中文社区(涵盖2400+服务)及长期记忆能力。用户可通过IDE插件使用,兼容主流开发环境如JetBrains、VS Code和Visual Studio。教程展示如何将MasterGo设计稿转化为前端代码,简化开发流程。探索链接:[通义灵码官网](https://lingma.aliyun.com/)。
|
容器
追悼日网站自动变为黑白(解决filter导致的absolute和fixed定位问题)
这篇文章介绍了如何解决在网站页面上使用`filter: grayscale(100%)`导致布局问题的方法,建议将`filter`属性应用在`html`根元素上,以避免影响`absolute`和`fixed`定位的元素。
172 1
追悼日网站自动变为黑白(解决filter导致的absolute和fixed定位问题)
|
供应链 物联网 区块链
新技术浪潮中的探索与应用
在技术不断进步的今日,新兴技术如区块链、物联网、虚拟现实等正逐渐改变我们的生活和工作方式。本文将深入探讨这些技术的发展趋势和应用场景,揭示其背后的原理和潜在影响,为读者提供一个全面而深入的理解视角。
|
JavaScript Java 测试技术
基于ssm+vue.js的高校试题管理系统附带文章和源代码设计说明文档ppt
基于ssm+vue.js的高校试题管理系统附带文章和源代码设计说明文档ppt
111 0
|
Kubernetes 容器
kubernetes挂载ceph rbd和cephfs
kubernetes挂载ceph rbd和cephfs
|
存储 安全 Linux
【看表情包学Linux】磁盘基础知识 | CHS 寻址 | 逻辑扇区 LBA | 索引节点 inode | 伪删除 inode bitmap 1→0
【看表情包学Linux】磁盘基础知识 | CHS 寻址 | 逻辑扇区 LBA | 索引节点 inode | 伪删除 inode bitmap 1→0
475 0
|
编译器 C语言 C++
C++类和对象中:运算符重载+const成员函数+日期类的完善(下)
C++类和对象中:运算符重载+const成员函数+日期类的完善
133 0
|
Java
Java学习 3. 习题 1.
Java学习 3. 习题 1.
83 0
|
存储 运维 安全
在互联网高速发展的当下,选择托管是最明智的选择!
作为一个一线开发者,个人觉得上云托管是最佳选择。为什么这样说?现在的IT行业的技术发展已经不再是20年前,甚至更久的样子,可能在之前关于企业的服务器大部分会选择自建,因为那时候搭建企业自己的服务器以及相关的数据库等服务是主流,也是处于没办法的状态,当时的云服务厂商要么是昂贵的国外云厂商,国内的云厂商发展还处于雏形且云厂商很少。企业往往是出于无奈的状态下,不得不搭建自己的服务器及配套的功能。那么接下来就来分享一下为什么要选择云托管。
208 1
在互联网高速发展的当下,选择托管是最明智的选择!