Linq to sql之简单的分页

in Develop

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

0 Comments

Leave a Reply

Using Gravatars in the comments - get your own and be recognized!

XHTML: These are some of the tags you can use: <a href=""> <b> <blockquote> <code> <em> <i> <strike> <strong>