Linq to sql之简单的分页

费话不多说,主要是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]

是不是觉得非常熟悉?
相当Easy

相关文章

对不起,评论已关闭