Как использовать Skip () и Take () с IQueryable - PullRequest
6 голосов
/ 17 сентября 2011

У меня есть пользовательский элемент управления, который содержит повторитель, и его данные устанавливаются с использованием объекта IEnumerable, который содержит данные, возвращаемые из запроса в коде. Ретранслятор имеет функцию подкачки и отображает произвольное количество записей для каждой страницы.

Я не хочу загружать все данные каждый раз, когда пользователь нажимает следующую кнопку, чтобы увидеть следующую страницу записей в повторителе. Как я могу сделать его IQueryable и использовать Skip () и Take () для отображения только записей, необходимых для этой страницы?

У меня есть следующий код:

//Code that assigns query to repeater data source
DataSet = QueryGoesHere.ToArray(); // returns IEnumerable
repeater.DataSource = DataSet;
repeater.DataBind();

//Code that creates PagedDataSource - how can I update this to make it display only the records that are needed for the currently displayed page?

            objPds = new PagedDataSource();
            objPds.DataSource = DataSource
            objPds.AllowPaging = true;
            objPds.PageSize = 5;
            objPds.CurrentPageIndex = CurrentPage;
            lblCurrentPage.Text = "Page: " + (CurrentPage + 1).ToString() + " of " + objPds.PageCount.ToString();

Ответы [ 3 ]

6 голосов
/ 17 сентября 2011

если я вас правильно понял, вы хотите использовать собственную реализацию вместо загрузки всех данных, а затем с помощью права PagedDataSource?

Если это так, убедитесь, что QueryGoesHere является Queryable, поддерживающим это (Linq2Sql или EF). Затем вы должны получить счет вашей даты, как это

var count = QueryGoesHere.Count();

и получите часть данных, которые вы хотите отобразить:

var skip = (curPageNumber - 1)*itemsPerPage;
var display = Math.Min(count - skip, itemsPerPage);

и просто используйте

var displayedItems = QueryGoesHere.Skip(skip).Take(display).ToArray();

Это должно сработать.

1 голос
/ 17 сентября 2011
    public static Dictionary<string, string> SampleDataList(int startIndex, int pageSize)
    {
        var sampleTable = new Dictionary<string, string>();

        var page = TemporaryData().Skip(startIndex).Take(pageSize);
        var query = from p in page
                    select new
                    {
                        FirstColumn = p.Key,
                        SecondColumn = p.Value
                    };

        foreach (var row in query)
            sampleTable.Add(row.FirstColumn, row.SecondColumn);

        return sampleTable;
    }

Следующая ссылка поможет вам понять, как использовать нумерацию страниц с ретранслятором

http://cmsnsoftware.blogspot.com/2011/07/how-to-use-custom-pagination.html

1 голос
/ 17 сентября 2011

PagedList и связанные расширения будут вам полезны. Пожалуйста, обратитесь к: http://wekeroad.com/2007/12/10/aspnet-mvc-pagedlistt

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...