Datalist пейджинг с linq - PullRequest
       15

Datalist пейджинг с linq

5 голосов
/ 19 апреля 2009

Я создаю страницу, которая использует Linq для доступа к данным, и я использую DataList для отображения данных. Как я могу использовать Linq для подкачки данных? Пожалуйста, прочитайте простой код ниже:

Обычно я использую PagedDatasource, но, похоже, это работает только с DataTable.

Вот мой Linq для возврата Datatable, который связан с Datalist:

Открытая общая функция 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

Ответы [ 2 ]

8 голосов
/ 19 апреля 2009

Вы найдете очень полезными методы .Skip () и .Take () .

Я заметил, что вы предоставили некоторый код из своего проекта, так что вот обновление о том, как вы должны реализовать эти методы.

В вашем методе получения данных сделайте следующее:

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

Затем укажите переменные CurrentPage и PageSize в качестве аргументов метода. (Вы не хотите встраивать их в доступ к данным, поскольку они могут различаться в разных частях вашего сайта ...)

2 голосов
/ 19 апреля 2009

Вам нужно посмотреть на SQL-пейджинг с LINQ , используя методы Skip () и Take ().

...