Linq的分页主要是使用了skip和take 关于skip 参看 http://msdn.microsoft.com/zh-cn/library/bb357513.aspx 关于take 参看http://msdn.microsoft.com/zh-cn/library/bb300906.aspx 另外说明下NorthWindDataContext 我是采用了Linq的类成长办法自动生成的 关于Linq的语法和介绍可以参看http://www.cnblogs.com/lovecherry/archive/2007/08/13/853754.html 上面介绍的还不错。其实如果你用过SQL,用过枚举类型会发现LINQ没啥,但是确实很省力,会发现以前的ORM工具在小型开发的时候直接用LINQ算了。 前台代码Default.aspx <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <%@ Register assembly="AspNetPager" namespace="Wuqi.Webdiyer" tagprefix="webdiyer" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div> <asp:GridView ID="GridView1" runat="server"> </asp:GridView> <br /> <webdiyer:AspNetPager ID="Pager" runat="server" PageIndexBoxType="DropDownList" ShowPageIndexBox="Always" SubmitButtonText="Go" TextAfterPageIndexBox="页" TextBeforePageIndexBox="转到" CurrentPageButtonPosition="End" CustomInfoHTML="共%PageCount%页,当前为第%CurrentPageIndex%页,每页%PageSize%条" FirstPageText="首页" LastPageText="尾页" NextPageText="下一页" onpagechanged="Pager_PageChanged" PrevPageText="上一页"> </webdiyer:AspNetPager> </div> </form> </body> </html> 后台代码Default.aspx.cs using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { //得到所有的分页信息和预设的分页大小 //pagesize来自girdview NorthWindDataContext context = new NorthWindDataContext(); int total = (from custom in context.GetTable<Customers>() select custom).Count(); Pager.PageSize = GridView1.PageSize; Pager.RecordCount = total; gvDataBind(GridView1.PageSize, 1); } } protected void gvDataBind(int pagesize, int pageindex) { NorthWindDataContext context = new NorthWindDataContext(); var customs = (from custom in context.GetTable<Customers>() orderby custom.ContactName select new { custom.ContactName, custom.CustomerID, custom.CompanyName, custom.ContactTitle }).Skip((pageindex - 1) * pagesize).Take(pagesize); GridView1.DataSource = customs; GridView1.DataBind(); } protected void Pager_PageChanged(object sender, EventArgs e) { GridView1.PageIndex = Pager.CurrentPageIndex; gvDataBind(GridView1.PageSize, Pager.CurrentPageIndex); } }