我正在创建一个使用Linqfor数据访问的页面,我正在使用DataList来显示数据。我如何使用Linq进行数据分页?请阅读以下简单代码:
我通常使用PagedDatasource,但这似乎只适用于DataTable。
这是我的Linq返回与Datalist绑定的Datatable:
公共共享函数GetStudentList()As DataTable
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
答案 0 :(得分: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)
然后提供CurrentPage
和PageSize
变量作为方法的参数。 (您不希望将它们构建到数据访问中,因为它们可能因站点的不同部分而异...)
答案 1 :(得分:2)
您需要使用Skip()和Take()方法查看SQL Paging with LINQ。