2009-04-18 60 views
5

我创建了一个使用Linqfor数据访问的页面,我使用DataList来显示数据。我如何使用Linq进行数据分页?请阅读下面的简单代码:linq的Datalist分页

我通常使用PagedDatasource,但这似乎只适用于DataTable。

这里是我的LINQ到返回的DataTable这与Datalist中势必:

公共共享功能GetStudentList()作为数据表

Dim db As New DemoDataClassesDataContext() 

    Dim query = From st In db.students _ 
       Order By st.st_studentid Ascending _ 
       Select st 

    Dim dtStudent = New DataTable("myst") 


    dtStudent.Columns.Add("st_id", GetType(Integer)) 
    dtStudent.Columns.Add("st_userid", GetType(Guid)) 
    dtStudent.Columns.Add("st_studentid", GetType(Integer)) 
    dtStudent.Columns.Add("st_firstname", GetType(String)) 
    dtStudent.Columns.Add("st_lastname", GetType(String)) 
    dtStudent.Columns.Add("st_gender", GetType(String)) 
    dtStudent.Columns.Add("st_email", GetType(String)) 


    For Each q In query 
     dtStudent.Rows.Add(New Object() {q.st_id, q.st_userid, q.st_studentid, q.st_firstname, q.st_lastname, q.st_gender, q.st_email}) 
    Next 

    Return dtStudent 

End Function 

在代码的页面的背后:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 

    If Not Page.IsPostBack() Then 
     LoadData() 
    End If 

End Sub 

Private Sub LoadData() 
    dsStduent = da_Student.GetStudentList() 
    dt_Student.DataSource = dsStduent 
    dt_Student.DataBind() 

End Sub 

回答

8

你会发现方法.Skip() and .Take()非常有用。

我注意到你从你的项目中提供了一些代码,所以这里是你应该如何实现这些方法的更新。

在您的用于获取数据的方法,请执行以下操作:

Dim query = (From st In db.students _ 
      Order By st.st_studentid Ascending _ 
      Select st).Skip((CurrentPage - 1) * PageSize).Take(PageSize) 

然后提供CurrentPagePageSize变量作为自变量的方法。 (您不希望将它们构建到数据访问中,因为它们可能会在您网站的不同部分之间发生变化......)

+0

如何确定数据是否已达到最大限制,即我们位于最后一页? – 2012-09-06 06:59:42