public Data() { Meta = null; Controls = null; ControlsList = null; Expressions = null; }
public PaginatedListBuilder(Uri baseUri, IQueryable <Q> items, int perPage, int page, Func <Q, T> transform) { UriBuilder b = new UriBuilder(baseUri); b.Query = string.Join("&", b.Query.Split('&').Where(p => !p.Contains("page="))); baseUri = b.Uri; int total = items.Count(); int numberOfPages = total / perPage + (total % perPage > 0 ? 1 : 0); Meta = new MetaObj() { CurrentPage = page, From = (page - 1) * perPage + 1, To = page * perPage - (page == numberOfPages ? perPage - total % perPage : 0), LastPage = numberOfPages, PerPage = perPage, Total = total, Path = baseUri.ToString() }; Links = new LinksObj { First = new Uri(QueryHelpers.AddQueryString(baseUri.ToString(), "page", "1")), Last = new Uri(QueryHelpers.AddQueryString(baseUri.ToString(), "page", $"{numberOfPages}")), Prev = page == 1 ? null : new Uri(QueryHelpers.AddQueryString(baseUri.ToString(), "page", $"{page - 1}")), Next = page == numberOfPages ? null : new Uri(QueryHelpers.AddQueryString(baseUri.ToString(), "page", $"{page + 1}")) }; Data = items.Skip((page - 1) * perPage).Take(perPage).Select(transform).ToList(); }