Linq 分页查询数据

来源:互联网 发布:端口数据包监听工具 编辑:程序博客网 时间:2024/04/26 18:43
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using System.Data;public partial class test6_LinqDefault2 : System.Web.UI.Page{    //新总订单数    public double spOrderNums = 0;    //成功订单    public double SuccessOrderNums = 0;    protected void Page_Load(object sender, EventArgs e)    {        #region 功能测试1        //this.Repeater1.DataSource = this.GetList();        //this.Repeater1.DataBind();        #endregion        testDataTable2();    }    #region 功能测试1    public IList<Student> GetList()    {        IList<Student> list = new List<Student>();        list.Add(new Student("张三", 22));        list.Add(new Student("李四", 25));        return list;    }    public class Student    {        public Student(string _Name, int _Age)        {            this.Name = _Name;            this.Age = _Age;        }        public string Name        {            set;            get;        }        public int Age        {            set;            get;        }    }    public class order    {        public double totalNum { get; set; }        public double goodPercent { get; set; }        public double generalPercent { get; set; }        public double badPercent { get; set; }    }    #endregion    void testDataTable2()    {        DataTable dtA = new DataTable();        dtA.Columns.Add("id", typeof(int));        dtA.Columns.Add("goodNum", typeof(double));        dtA.Columns.Add("generalNum", typeof(double));        dtA.Columns.Add("badNum", typeof(double));        //dtA.Rows.Add(1, "20", "30", "50");        //dtA.Rows.Add(2, "90", "3", "2");        dtA.Rows.Add(3, "1", "5", "10");        dtA.Rows.Add(4, "10", "32", "2");        dtA.Rows.Add(5, "66", "55", "44");        DataTable dtB = dtA.Clone();        dtB.Rows.Add(1, "32", "43", "21");        dtB.Rows.Add(2, "65", "63", "5");        dtB.Rows.Add(3, "4", "54", "5");        dtB.Rows.Add(4, "43", "44", "565");        dtB.Rows.Add(5, "66", "55", "44");        DataTable dtC = dtA.Clone();        dtC.Rows.Add(1, "3", "2", "32");        dtC.Rows.Add(2, "43", "63", "65");        dtC.Rows.Add(3, "7", "9", "76");        dtC.Rows.Add(4, "9", "67", "34");        dtC.Rows.Add(5, "66", "55", "44");        DataTable dtD = dtA.Clone();        dtD.Columns.Add("totalNum", typeof(double));        dtD.Columns.Add("goodPercent", typeof(double));        dtD.Columns.Add("generalPercent", typeof(double));        dtD.Columns.Add("badPercent", typeof(double));        var dtAData=  from a in dtA.AsEnumerable() select a ;        var dtBData = from b in dtB.AsEnumerable() select b;        var dtCData = from c in dtC.AsEnumerable() select c;        int aCount = dtAData.Count();        int bCount = dtBData.Count();        int cCount = dtCData.Count();        #region 条数不够补0        for (int i = 1; i <= aCount-bCount; i++)        {            //dtB.Rows.Add(bCount+i, "0", "0", "0");            dtB.Rows.Add(0, "0", "0", "0");        }        for (int i = 1; i <= aCount - cCount; i++)        {            dtC.Rows.Add(0, "0", "0", "0");        }        #endregion         var fullJoinData = (from a in dtA.AsEnumerable()                            join c in dtC.AsEnumerable() on a.Field<int>("id") equals c.Field<int>("id")                            join b in dtB.AsEnumerable() on c.Field<int>("id") equals b.Field<int>("id")                            let goodNum = a.Field<double>("goodNum")                            let total1Score = a.Field<double>("goodNum") + a.Field<double>("generalNum") + a.Field<double>("badNum")                            let good1percent = Math.Round(goodNum / total1Score, 2)                            let goodNum2 = b.Field<double>("goodNum")                            let total2Score = b.Field<double>("goodNum") + b.Field<double>("generalNum") + b.Field<double>("badNum")                            let good2percent = Math.Round(goodNum2 / total2Score, 2)                            let goodNum3 = c.Field<double>("goodNum")                            let total3Score = c.Field<double>("goodNum") + c.Field<double>("generalNum") + c.Field<double>("badNum")                            let good3percent = Math.Round(goodNum3 / total3Score, 2)                            let goodlink = Math.Round((good1percent / good2percent - 1) * 100, 2)                            let goodyear = Math.Round((good1percent / good3percent - 1) * 100, 2)                            //where goodNum2 > 20                            select new                            {                                id = a.Field<int>("id"),                                goodNum = goodNum,                                generalNum = a.Field<double>("generalNum"),                                badNum = a.Field<double>("badNum"),                                total1Score = total1Score,                                good1percent = good1percent,                                //s2=spOrderNums,                                id2 = b.Field<int>("id"),                                goodNum2 = goodNum2,                                generalNum2 = b.Field<double>("generalNum"),                                badNum2 = b.Field<double>("badNum"),                                total2Score = total2Score,                                good2percent = good2percent,                                id3 = c.Field<int>("id"),                                goodNum3 = goodNum3,                                generalNum3 = c.Field<double>("generalNum"),                                badNum3 = c.Field<double>("badNum"),                                total3Score = total3Score,                                good3percent = good3percent,                                goodlink = goodlink,                                goodyear = goodyear,                            })                           // .Skip(supplierPager.CurrentPageIndex-1 ).Take(supplierPager.CurrentPageIndex);                            //.Skip((supplierPager.CurrentPageIndex - 1) * supplierPager.PageSize).Take(supplierPager.PageSize * supplierPager.CurrentPageIndex);        .Skip((supplierPager.CurrentPageIndex - 1) * supplierPager.PageSize).Take(supplierPager.PageSize);                            //.Skip(4).Take(5);        this.Repeater1.DataSource = fullJoinData;        this.Repeater1.DataBind();        //supplierPager.PageSize;        supplierPager.RecordCount = dtAData.Count();    }    #region 强类型强转换    public static class Binder<TEntity> where TEntity : class    {        public static TResult Eval<TResult>(System.Web.UI.Page p, Func<TEntity, TResult> func)        {            return func((TEntity)p.GetDataItem());        }    }    #endregion    protected void supplierPager_PageChanged(object sender, EventArgs e)    {        testDataTable2();    }}

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="LinqDefault2.aspx.cs" Inherits="test6_LinqDefault2" %><%@ 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:Repeater ID="Repeater1" runat="server">             <ItemTemplate>                开始                满意:<%#Eval("goodNum")%>                一般:<%#Eval("generalNum")%>                不满意:<%#Eval("badNum")%>                满意度小计:<%#Eval("total1Score")%>                满意度百分比:<%#Eval("good1percent")%>                                满意:<%#Eval("goodNum2")%>                一般:<%#Eval("generalNum2")%>                不满意:<%#Eval("badNum2")%>                满意度小计:<%#Eval("total2Score")%>                满意度百分比:<%#Eval("good2percent")%>                                满意:<%#Eval("goodNum3")%>                一般:<%#Eval("generalNum3")%>                不满意:<%#Eval("badNum3")%>                满意度小计:<%#Eval("total3Score")%>                满意度百分比:<%#Eval("good3percent")%>                                满意环比值:<%# Eval("goodlink")%>%                满意同比值:<%# Eval("goodyear")%>%                结束                <br />             </ItemTemplate>         </asp:Repeater>         <webdiyer:AspNetPager ID="supplierPager" runat="server" Direction="LeftToRight"              FirstPageText="第一页" PageSize="2"           HorizontalAlign="left" LastPageText="最后一页" NextPageText="下一页" PrevPageText="上一页"          Width="100%" CenterCurrentPageButton="True" CustomInfoHTML="当前页码为 %CurrentPageIndex% 总页数 %PageCount% 共 %RecordCount% 条记录"          CustomInfoTextAlign="Left" NumericButtonCount="8" PageIndexBoxType="DropDownList"          ShowCustomInfoSection="Right" AlwaysShow="True"              onpagechanged="supplierPager_PageChanged">        </webdiyer:AspNetPager>    </div>    </form></body></html>


如果想看3页面

        dtA.Rows.Add(1, "20", "30", "50");
        dtA.Rows.Add(2, "90", "3", "2");

注释取消


我的分页设置 页长 2,

supplierPager.RecordCount = dtAData.Count();  页总数

页码 = 页总数 / 页长


第一页数据


第2页面数据