zoukankan      html  css  js  c++  java
  • linq to sql分页的几种方法

    1.数据的分布Skip()和take()

    Skip(100)代表跳过100行后.从第101行开始分页;

    take(10)表示多少行分页;

    例:

    var result=from pdt in db.Product

    select pdt;

    this.dataview.DataSource=result.Skip(10).take(10);

    this dataview.DataBind();

    注:这种方式一次性查询出来所有数据,然后再分页;

    2.下面的方式是每个提交时绑定的都是特定的数据,而非所有数据;

    public overridevoid DataBind()

    {

    db.log=this.response.output;

    var result=from pdt in db.product

    select pdt;

    int skipNumber=Int.parse(this.textbox1.text)*10;

    this.dataview.DataSource=result.Skip(skipNumber).take(10);

    this dataview.DataBind();

    }

    protected void NextButton_Click(Object sender,EventArgs e)

    {

    this textbox1.text=(int.parse(this.textbox1.text)+1).ToString);

    this.DataBind();

    }

    protected void form_Load(Object send,EventArgs e)

    {

    if (!this.IsPostBack)

    {

    this.DataBind();

    }

    }

    4、

    费话不多说,主要是Linq中的Skip及Take这二个扩展方法

    int RecordCount = 0;
    int PageCount = 1;
    DataClassesDataContext data = new DataClassesDataContext();
    int SkipIndex = 0;
    private string _PageString = "";
    public string PageString
    {
    get {
    return _PageString;
    }
    set {
    _PageString = value;
    }
    }
    protected void Page_Load(object sender, EventArgs e)
    {
    RecordCount = data.Orders.Count(); //得到记录数
    PageCount = (int)Math.Ceiling((decimal)RecordCount / 10); //以10条记录为一页,计算总页码
    int page = 1;
    if (!string.IsNullOrEmpty(Request.QueryString["page"]))
    page = Convert.ToInt16(Request.QueryString["page"]);
    SkipIndex = (page-1) * 10; //计算起始索引,以供后面的Skip扩展方法之用

    //拼接分页代码
    StringBuilder sb = new StringBuilder();
    for (int i = 1; i < PageCount; i++)
    {
    sb.AppendFormat(@" <a href=""?page={0}"">{0}</a> ",i);
    }
    _PageString = sb.ToString();
    bind();
    }
    void bind()
    {
    //奇妙的Linq表达式
    var q = (from c in data.Orders select new
    { CustomerID = c.CustomerID, ShipAddress=c.ShipAddress,ID = c.OrderID}
    ).Skip(SkipIndex).Take(10);
    this.GridView1.DataSource = q;
    this.GridView1.DataBind();
    }

    当显示的是第一页时,看linq表达式中为我们动态生成了什么样的语句:

    SELECT TOP 10 [t0].[CustomerID], [t0].[ShipAddress], [t0].[OrderID] AS [ID]
    FROM [dbo].[Orders] AS [t0]

    6、以Northwind为示例数据库,DLINQ(LINQ to SQL)之结合GridView控件和ObjectDataSource控件演示大数据量分页,同时介绍延迟执行和日志记录

    示例
    PagingAndLogging.aspx

     
    <%@ Page Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="PagingAndLogging.aspx.cs" Inherits="LINQ_DLINQ_PagingAndLogging" Title="大数据量分页、延迟执行和日志记录" %> <asp:Content ID="Content1" ContentPlaceHolderID="head" runat="Server"> </asp:Content> <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server"> <asp:GridView ID="gvProduct" runat="server" DataSourceID="odsProduct" AllowPaging="True" PageSize="5"> </asp:GridView> <asp:ObjectDataSource ID="odsProduct" runat="server" EnablePaging="True" SelectCountMethod="GetProductCount" SelectMethod="GetProduct" TypeName="PagingAndLogging"> <SelectParameters> <asp:Parameter Name="startRowIndex" Type="Int32" DefaultValue="0" /> <asp:Parameter Name="maximumRows" Type="Int32" DefaultValue="10" /> </SelectParameters> </asp:ObjectDataSource> </asp:Content>
     

    PagingAndLogging.cs

     
    using System; using System.Data; using System.Configuration; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Xml.Linq; using System.ComponentModel; using System.Collections.Generic; using System.IO; using DAL; /// <summary> /// PagingAndLogging 的摘要说明 /// </summary> [DataObject] public class PagingAndLogging { [DataObjectMethod(DataObjectMethodType.Select, true)] public List<Products> GetProduct(int startRowIndex, int maximumRows) { NorthwindDataContext ctx = new NorthwindDataContext(); // System.Data.Linq.DataContext的记录日志的功能 StreamWriter sw = new StreamWriter(HttpContext.Current.Request.PhysicalApplicationPath + "Log.txt", true); ctx.Log = sw; var products = (from p in ctx.Products select p).Skip(startRowIndex).Take(maximumRows); // products实现了IQueryable<T>接口 // 所以可以用如下方法从中获取DbCommand System.Data.Common.DbCommand cmd = ctx.GetCommand(products); string commandText = cmd.CommandText; foreach (System.Data.Common.DbParameter param in cmd.Parameters) { string parameterName = param.ParameterName; object value = param.Value; } // 延迟执行(Deferred Execution) // products实现了IEnumerable<T>接口 // IEnumerable<T>接口的一个特性是,实现它的对象可以把实际的查询运算延迟到第一次对返回值进行迭代(yield)的时候 // ToList()之前,如果是LINQ to SQL的话,那么就可以通过products.ToString()查看LINQ生成的T-SQL // ToList()后则执行运算 var listProducts = products.ToList(); // 执行运算后System.Data.Linq.DataContext会记录日志,所以应该在执行运算后Close掉StreamWriter sw.Flush(); sw.Close(); return listProducts; } public int GetProductCount(int startRowIndex, int maximumRows) { NorthwindDataContext ctx = new NorthwindDataContext(); StreamWriter sw = new StreamWriter(HttpContext.Current.Request.PhysicalApplicationPath + "Log.txt", true); ctx.Log = sw; // Count查询操作符(不延迟) - 返回集合中的元素个数 int c = (from p in ctx.Products select 0).Count(); sw.Flush(); sw.Close(); return c; } }
  • 相关阅读:
    RESTful API规范
    SOAP和RESTful 框架的 简介、对比和区别
    @requestBody 与@requestparam详解
    关于“Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.”
    post和get、PostMapping、GetMapping和RequestMapping
    强引用、软引用、弱引用、虚引用及方法区的垃圾回收策略
    jvm运行时数据区域
    HBase入门
    各种http报错的报错的状态码的分析
    maven配置多个镜像
  • 原文地址:https://www.cnblogs.com/zcm123/p/2913120.html
Copyright © 2011-2022 走看看