Wcf Friendly PagedList - PullRequest
       1

Wcf Friendly PagedList

1 голос
/ 07 февраля 2011

Мы работали с различными версиями PagedList , однако эти списки не подходят для Wcf.Они не сериализуются.У кого-нибудь есть хороший способ передать страничные данные через Wcf?(Включая такие свойства, как TotalRecords источника данных.)

1 Ответ

1 голос
/ 08 февраля 2011

Мы разработали решение для упрощения текущего PagedList до чего-то, что будет более сериализуемым и немного более приспособленным к нашему решению. Вместо создания собственного списка / коллекции мы создали класс, содержащий список / коллекцию.

Раньше мы теряли пользовательские свойства pagedlist, когда он был десериализован на стороне клиента. У него все еще были все элементы в списке, но в нем отсутствовали свойства.

Это основано на коде Троя Гуда, который, как мне кажется, основан на неопубликованном коде Microsoft MVC. Более подробную информацию можно найти здесь: http://www.squaredroot.com/2009/06/15/return-of-the-pagedlist/

 public class PagedList<T> : IPagedList<T>
    {
        public PagedList()
        {
        }

        public PagedList(IEnumerable<T> source, int pageIndex, int pageSize)
            : this(source == null ? new List<T>().AsQueryable() : source.AsQueryable(), pageIndex, pageSize)
        {
        }

        private PagedList(IQueryable<T> source, int pageIndex, int pageSize)            
        {
            TotalRecords = source.Count();

            // add items to internal list
            if (TotalRecords > 0)
                if (pageIndex == 0)
                    Data = source.Take(pageSize).ToList();
                else
                    Data = source.Skip((pageIndex) * pageSize).Take(pageSize).ToList();
        }

        public int TotalRecords { get; set; }

        public IEnumerable<T> Data { get; set; }
    }

, а затем фактическая реализация через следующее расширение:

public static PagedList<T> ToPagedList<T>(this IEnumerable<T> source, int pageIndex, int pageSize)
{
    return new PagedList<T>(source, pageIndex, pageSize);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...