<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="http://www.codeplex.com/rss.xsl"?><rss version="2.0"><channel><title>PagedList</title><link>http://pagedlist.codeplex.com/Project/ProjectRss.aspx</link><description>PagedList makes it easier for .Net developers to write paging code. It allows you to take any List&amp;#60;T&amp;#62; and by specifying the page size and desired page index, select only a subset of that list. Page...</description><item><title>Created Issue: Currently not support IQueryable&lt;T&gt; from compiled query [3369]</title><link>http://pagedlist.codeplex.com/WorkItem/View.aspx?WorkItemId=3369</link><description>Users may passed compiled query as IQueryable&amp;#60;T&amp;#62;, so in this situation, skip and take cannot work at the same time before the query instantiated to IEnumerable&amp;#60;T&amp;#62;, even count will instantiated the query first, which will lower the performance. I was thinking add extension allowed to pass delegation rather than query. But this is not ultimate solution. If recompile a compiled query just lose the performance using compiled query. It&amp;#39;s hard.&lt;br /&gt;</description><author>Singlewind</author><pubDate>Wed, 18 Nov 2009 04:01:32 GMT</pubDate><guid isPermaLink="false">Created Issue: Currently not support IQueryable&lt;T&gt; from compiled query [3369] 20091118040132A</guid></item><item><title>Reviewed: PagedList 1.1 (Sep 27, 2009)</title><link>http://pagedlist.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=31087#ReviewBy-jrummell</link><description>Rated 5 Stars &amp;#40;out of 5&amp;#41; - Thanks for maintaining PagedList and giving it a home on codeplex&amp;#33;</description><author>jrummell</author><pubDate>Mon, 28 Sep 2009 00:13:18 GMT</pubDate><guid isPermaLink="false">Reviewed: PagedList 1.1 (Sep 27, 2009) 20090928121318A</guid></item><item><title>Created Issue: Add AllowPartiallyTrustedCallers assembly attribute [2857]</title><link>http://pagedlist.codeplex.com/WorkItem/View.aspx?WorkItemId=2857</link><description>Adding the AllowPartiallyTrustedCallers assembly attribute will make the library medium trust friendly. I ran into an issue hosting on GoDaddy where I got the following exception when returning IPagedList&amp;#60;T&amp;#62; as the view model&amp;#58;&lt;br /&gt;&lt;br /&gt;System.Security.SecurityException&amp;#58; That assembly does not allow partially trusted callers.&lt;br /&gt;&lt;br /&gt;Adding the AllowPartiallyTrustedCallers assembly attribute fixed the issue. See http&amp;#58;&amp;#47;&amp;#47;stackoverflow.com&amp;#47;questions&amp;#47;1484431&amp;#47;asp-net-mvc-app-hosted-on-godaddy-has-securityexception for more info.&lt;br /&gt;</description><author>jrummell</author><pubDate>Mon, 28 Sep 2009 00:06:57 GMT</pubDate><guid isPermaLink="false">Created Issue: Add AllowPartiallyTrustedCallers assembly attribute [2857] 20090928120657A</guid></item><item><title>Updated Wiki: Home</title><link>http://pagedlist.codeplex.com/Wiki/View.aspx?title=Home&amp;version=16</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Project Description&lt;/h1&gt;PagedList makes it easier for .Net developers to write paging code. It allows you to take any List&amp;#60;T&amp;#62; and by specifying the page size and desired page index, select only a subset of that list. PagedList also provides properties that are useful when building UI paging controls.&lt;br /&gt;
&lt;h1&gt;&lt;a href="http://pagedlist.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=31087"&gt;Download&lt;/a&gt;&lt;/h1&gt;
&lt;h1&gt;Using PagedList&amp;lt;T&amp;gt;&lt;/h1&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; System;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; PagedList;

&lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt;&lt;span style="color:MediumTurquoise;"&gt; Program
&lt;/span&gt;{
	&lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;static&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Main(&lt;span style="color:Blue;"&gt;string&lt;/span&gt;[] args)
	{
		&lt;span style="color:Green;"&gt;// create a list of integers from 1 to 200&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;var&lt;/span&gt; list = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="color:Blue;"&gt;int&lt;/span&gt;&amp;gt;();
		&lt;span style="color:Blue;"&gt;for&lt;/span&gt;(&lt;span style="color:Blue;"&gt;var&lt;/span&gt; i = 1; i &amp;lt;= 200; i++)
			list.Add(i);

		&lt;span style="color:Blue;"&gt;var&lt;/span&gt; firstPage = list.ToPagedList(0, 20); &lt;span style="color:Green;"&gt;// first page, page size = 20&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is first page? {0}&amp;quot;&lt;/span&gt;, firstPage.IsFirstPage); &lt;span style="color:Green;"&gt;// true&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is last page? {0}&amp;quot;&lt;/span&gt;, firstPage.IsLastPage); &lt;span style="color:Green;"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;First value on page? {0}&amp;quot;&lt;/span&gt;, firstPage[0]); &lt;span style="color:Green;"&gt;// 1&lt;/span&gt;
		Console.WriteLine();

		&lt;span style="color:Blue;"&gt;var&lt;/span&gt; anotherPage = list.ToPagedList(4, 20); &lt;span style="color:Green;"&gt;// fifth page, page size = 20&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is first page? {0}&amp;quot;&lt;/span&gt;, anotherPage.IsFirstPage); &lt;span style="color:Green;"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is last page? {0}&amp;quot;&lt;/span&gt;, anotherPage.IsLastPage); &lt;span style="color:Green;"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Total integers in list? {0}&amp;quot;&lt;/span&gt;, anotherPage.TotalItemCount); &lt;span style="color:Green;"&gt;// 200&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Integers on this page? {0}&amp;quot;&lt;/span&gt;, anotherPage.Count); &lt;span style="color:Green;"&gt;// 20&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;First value on page? {0}&amp;quot;&lt;/span&gt;, anotherPage[0]); &lt;span style="color:Green;"&gt;// 81&lt;/span&gt;
		Console.WriteLine();

		&lt;span style="color:Blue;"&gt;var&lt;/span&gt; lastPage = list.ToPagedList(9, 20); &lt;span style="color:Green;"&gt;// last (tenth) page, page size = 20&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is first page? {0}&amp;quot;&lt;/span&gt;, lastPage.IsFirstPage); &lt;span style="color:Green;"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is last page? {0}&amp;quot;&lt;/span&gt;, lastPage.IsLastPage); &lt;span style="color:Green;"&gt;// true&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;First value on page? {0}&amp;quot;&lt;/span&gt;, lastPage[0]); &lt;span style="color:Green;"&gt;// 181&lt;/span&gt;
		Console.ReadKey(&lt;span style="color:Blue;"&gt;false&lt;/span&gt;);
	}
}
&lt;/pre&gt;&lt;/div&gt;
&lt;h1&gt;Using StaticPagedList&amp;lt;T&amp;gt;&lt;/h1&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; System;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; PagedList;

&lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt;&lt;span style="color:MediumTurquoise;"&gt; Program
&lt;/span&gt;{
	&lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;static&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Main(&lt;span style="color:Blue;"&gt;string&lt;/span&gt;[] args)
	{
		&lt;span style="color:Green;"&gt;// create a list of integers from 1 to 20&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;var&lt;/span&gt; list = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="color:Blue;"&gt;int&lt;/span&gt;&amp;gt;();
		&lt;span style="color:Blue;"&gt;for&lt;/span&gt;(&lt;span style="color:Blue;"&gt;var&lt;/span&gt; i = 1; i &amp;lt;= 20; i++)
			list.Add(i);

		&lt;span style="color:Blue;"&gt;var&lt;/span&gt; firstPage = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; StaticPagedList(list, 0, 20, 100); &lt;span style="color:Green;"&gt;// first page&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is first page? {0}&amp;quot;&lt;/span&gt;, firstPage.IsFirstPage); &lt;span style="color:Green;"&gt;// true&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is last page? {0}&amp;quot;&lt;/span&gt;, firstPage.IsLastPage); &lt;span style="color:Green;"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;First value on page? {0}&amp;quot;&lt;/span&gt;, firstPage[0]); &lt;span style="color:Green;"&gt;// 1&lt;/span&gt;
		Console.WriteLine();

		&lt;span style="color:Blue;"&gt;var&lt;/span&gt; middlePage = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; StaticPagedList(list, 2, 20, 100); &lt;span style="color:Green;"&gt;// third page, same values&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is first page? {0}&amp;quot;&lt;/span&gt;, anotherPage.IsFirstPage); &lt;span style="color:Green;"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is last page? {0}&amp;quot;&lt;/span&gt;, anotherPage.IsLastPage); &lt;span style="color:Green;"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;First value on page? {0}&amp;quot;&lt;/span&gt;, anotherPage[0]); &lt;span style="color:Green;"&gt;// 1&lt;/span&gt;
		Console.WriteLine();

		&lt;span style="color:Blue;"&gt;var&lt;/span&gt; lastPage = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; StaticPagedList(list, 4, 20, 100); &lt;span style="color:Green;"&gt;// fifth page, same values&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is first page? {0}&amp;quot;&lt;/span&gt;, lastPage.IsFirstPage); &lt;span style="color:Green;"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is last page? {0}&amp;quot;&lt;/span&gt;, lastPage.IsLastPage); &lt;span style="color:Green;"&gt;// true&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;First value on page? {0}&amp;quot;&lt;/span&gt;, lastPage[0]); &lt;span style="color:Green;"&gt;// 1&lt;/span&gt;
		Console.WriteLine();
	}
}
&lt;/pre&gt;&lt;/div&gt;
&lt;h1&gt;Change Log&lt;/h1&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;August 4, 2009&lt;/b&gt; Troy Goode adds a &lt;i&gt;StaticPagedList&lt;/i&gt; class for working with pre-divided sets of data (like those returned when querying the list of users in Membership).
&lt;ul&gt;&lt;li&gt;&lt;i&gt;PagedList&amp;lt;T&amp;gt;&lt;/i&gt; now derives from &lt;i&gt;BasePagedList&amp;lt;T&amp;gt;&lt;/i&gt;, where most of the work is done.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;StaticPagedList&amp;lt;T&amp;gt;&lt;/i&gt; created; also derives from &lt;i&gt;BasePagedList&amp;lt;T&amp;gt;&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Added batch scripts for building, testing, and creating a release.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;June 11, 2009&lt;/b&gt; Troy Goode posts further tweaks to &lt;i&gt;PagedList&amp;lt;T&amp;gt;&lt;/i&gt; code, adds Intellisense documentation, adds source to CodePlex, and creates a signed release binary available for download via CodePlex.
&lt;ul&gt;&lt;li&gt;Eliminated extraneous call to .Skip(n) when n == 0. &lt;a href="http://blogs.teamb.com/craigstuntz/2009/06/10/38313/" class="externalLink"&gt;Reported by Craig Stuntz.&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Removed constructor overload to &lt;i&gt;PagedList&amp;lt;T&amp;gt;&lt;/i&gt; that accepted &lt;i&gt;IQueryable&amp;lt;T&amp;gt;&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Removed protected &lt;i&gt;Initialize&lt;/i&gt; method and moved code into only remaining constructor.&lt;/li&gt;
&lt;li&gt;Optimized constructor to work for &lt;i&gt;IEnumerable&amp;lt;T&amp;gt;&lt;/i&gt; or &lt;i&gt;IQueryable&amp;lt;T&amp;gt;&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Moved property calculations for &lt;i&gt;PageNumber&lt;/i&gt;, &lt;i&gt;HasPreviousPage&lt;/i&gt;, &lt;i&gt;HasNextPage&lt;/i&gt;, &lt;i&gt;IsFirstPage&lt;/i&gt;, and &lt;i&gt;IsLastPage&lt;/i&gt; from constructor to property getter. Given that these properties are not likely called in loops, the potential performance hit is likely made up for by the enhanced readability of the constructor code.&lt;/li&gt;
&lt;li&gt;Removed overload of &lt;i&gt;ToPagedList&lt;/i&gt; extension method that took &lt;i&gt;IQueryable&amp;lt;T&amp;gt;&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Renamed &lt;i&gt;Pagination&lt;/i&gt; static extensions methods class to &lt;i&gt;PagedListExtensions&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Added test to verify that when there are two pages of 1 item each, the second page will contain the correct item (the test passed). &lt;a href="http://www.squaredroot.com/2008/07/08/pagedlist-strikes-back/comment-page-1/#comment-55" class="externalLink"&gt;Suggested by Matt Bertulli.&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Moved code from &lt;i&gt;System.Collections.Generics&lt;/i&gt; namespace to &lt;i&gt;PagedList&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Created a solution just for PagedList related classes and signed the assembly using a private key generated just for PagedList.&lt;/li&gt;
&lt;li&gt;Added XML documentation for all interfaces, classes, methods, and properties.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;July 8, 2008&lt;/b&gt; Troy Goode &lt;a href="http://www.squaredroot.com/2008/07/08/PagedList-Strikes-Back/" class="externalLink"&gt;posts&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; further tweaks to &lt;i&gt;PagedList&amp;lt;T&amp;gt;&lt;/i&gt; code and supplies unit tests.
&lt;ul&gt;&lt;li&gt;Changed &lt;i&gt;IPagedList&lt;/i&gt; interface to &lt;i&gt;IPagedList&amp;lt;T&amp;gt;&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Added &lt;i&gt;PageNumber&lt;/i&gt; property.&lt;/li&gt;
&lt;li&gt;Added &lt;i&gt;TotalItemCount&lt;/i&gt; property.&lt;/li&gt;
&lt;li&gt;Added constructor overload to &lt;i&gt;PagedList&amp;lt;T&amp;gt;&lt;/i&gt; that accepts &lt;i&gt;IQueryable&amp;lt;T&amp;gt;&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Refactored constructor code into protected &lt;i&gt;Initialize&lt;/i&gt; method.&lt;/li&gt;
&lt;li&gt;Re-added overload of &lt;i&gt;ToPagedList&lt;/i&gt; extension method that takes &lt;i&gt;IQueryable&amp;lt;T&amp;gt;&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Added unit tests.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;April 4, 2008&lt;/b&gt; Troy Goode &lt;a href="http://www.squaredroot.com/2008/04/08/Updated-PagedList-Class/" class="externalLink"&gt;posts&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; further tweaks to &lt;i&gt;PagedList&amp;lt;T&amp;gt;&lt;/i&gt; code.
&lt;ul&gt;&lt;li&gt;Added &lt;i&gt;IPagedList&lt;/i&gt; interface. &lt;i&gt;PagedList&amp;lt;T&amp;gt;&lt;/i&gt; implemented &lt;i&gt;IPagedList&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Added &lt;i&gt;IsFirstPage&lt;/i&gt; property.&lt;/li&gt;
&lt;li&gt;Added &lt;i&gt;IsLastPage&lt;/i&gt; property.&lt;/li&gt;
&lt;li&gt;Removed overload of &lt;i&gt;ToPagedList&lt;/i&gt; extension method that took &lt;i&gt;IQueryable&amp;lt;T&amp;gt;&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Changed property value calculations in constructor.&lt;/li&gt;
&lt;li&gt;Moved code from &lt;i&gt;Mvc2.Helpers&lt;/i&gt; namespace to &lt;i&gt;System.Collections.Generics&lt;/i&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;April 4, 2008&lt;/b&gt; Robert Muehsig &lt;a href="http://code-inside.de/blog-in/2008/04/08/aspnet-mvc-pagination-view-user-control/" class="externalLink"&gt;posts&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; a sample MVC pagination control along with tweaks to &lt;i&gt;PagedList&amp;lt;T&amp;gt;&lt;/i&gt; code.
&lt;ul&gt;&lt;li&gt;Removed &lt;i&gt;IPagedList&lt;/i&gt; interface. &lt;i&gt;PagedList&amp;lt;T&amp;gt;&lt;/i&gt; no longer implements &lt;i&gt;IPagedList&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Added &lt;i&gt;TotalPages&lt;/i&gt; property.&lt;/li&gt;
&lt;li&gt;Renamed &lt;i&gt;IsPreviousPage&lt;/i&gt; property to &lt;i&gt;HasPreviousPage&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Renamed &lt;i&gt;IsNextPage&lt;/i&gt; property to &lt;i&gt;HasNextPage&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Moved code from &lt;i&gt;System.Web.Mvc&lt;/i&gt; namespace to &lt;i&gt;Mvc2.Helpers&lt;/i&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;December 10th, 2007&lt;/b&gt; Rob Conery &lt;a href="http://blog.wekeroad.com/blog/aspnet-mvc-pagedlistt" class="externalLink"&gt;posts&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; Scott Guthrie's &lt;i&gt;PagedList&amp;lt;T&amp;gt;&lt;/i&gt; code.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>TroyGoode</author><pubDate>Tue, 04 Aug 2009 04:47:03 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20090804044703A</guid></item><item><title>Updated Release: PagedList 1.1 (Aug 04, 2009)</title><link>http://pagedlist.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=31087</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Project Description&lt;/h1&gt;PagedList makes it easier for .Net developers to write paging code. It allows you to take any List&amp;#60;T&amp;#62; and by specifying the page size and desired page index, select only a subset of that list. PagedList also provides properties that are useful when building UI paging controls.&lt;br /&gt;
&lt;h1&gt;Using PagedList&amp;lt;T&amp;gt;&lt;/h1&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; System;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; PagedList;

&lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt;&lt;span style="color:MediumTurquoise;"&gt; Program
&lt;/span&gt;{
	&lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;static&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Main(&lt;span style="color:Blue;"&gt;string&lt;/span&gt;[] args)
	{
		&lt;span style="color:Green;"&gt;// create a list of integers from 1 to 200&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;var&lt;/span&gt; list = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="color:Blue;"&gt;int&lt;/span&gt;&amp;gt;();
		&lt;span style="color:Blue;"&gt;for&lt;/span&gt;(&lt;span style="color:Blue;"&gt;var&lt;/span&gt; i = 1; i &amp;lt;= 200; i++)
			list.Add(i);

		&lt;span style="color:Blue;"&gt;var&lt;/span&gt; firstPage = list.ToPagedList(0, 20); &lt;span style="color:Green;"&gt;// first page, page size = 20&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is first page? {0}&amp;quot;&lt;/span&gt;, firstPage.IsFirstPage); &lt;span style="color:Green;"&gt;// true&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is last page? {0}&amp;quot;&lt;/span&gt;, firstPage.IsLastPage); &lt;span style="color:Green;"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;First value on page? {0}&amp;quot;&lt;/span&gt;, firstPage[0]); &lt;span style="color:Green;"&gt;// 1&lt;/span&gt;
		Console.WriteLine();

		&lt;span style="color:Blue;"&gt;var&lt;/span&gt; anotherPage = list.ToPagedList(4, 20); &lt;span style="color:Green;"&gt;// fifth page, page size = 20&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is first page? {0}&amp;quot;&lt;/span&gt;, anotherPage.IsFirstPage); &lt;span style="color:Green;"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is last page? {0}&amp;quot;&lt;/span&gt;, anotherPage.IsLastPage); &lt;span style="color:Green;"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Total integers in list? {0}&amp;quot;&lt;/span&gt;, anotherPage.TotalItemCount); &lt;span style="color:Green;"&gt;// 200&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Integers on this page? {0}&amp;quot;&lt;/span&gt;, anotherPage.Count); &lt;span style="color:Green;"&gt;// 20&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;First value on page? {0}&amp;quot;&lt;/span&gt;, anotherPage[0]); &lt;span style="color:Green;"&gt;// 81&lt;/span&gt;
		Console.WriteLine();

		&lt;span style="color:Blue;"&gt;var&lt;/span&gt; lastPage = list.ToPagedList(9, 20); &lt;span style="color:Green;"&gt;// last (tenth) page, page size = 20&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is first page? {0}&amp;quot;&lt;/span&gt;, lastPage.IsFirstPage); &lt;span style="color:Green;"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is last page? {0}&amp;quot;&lt;/span&gt;, lastPage.IsLastPage); &lt;span style="color:Green;"&gt;// true&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;First value on page? {0}&amp;quot;&lt;/span&gt;, lastPage[0]); &lt;span style="color:Green;"&gt;// 181&lt;/span&gt;
		Console.ReadKey(&lt;span style="color:Blue;"&gt;false&lt;/span&gt;);
	}
}
&lt;/pre&gt;&lt;/div&gt;
&lt;h1&gt;Using StaticPagedList&amp;lt;T&amp;gt;&lt;/h1&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; System;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; PagedList;

&lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt;&lt;span style="color:MediumTurquoise;"&gt; Program
&lt;/span&gt;{
	&lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;static&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Main(&lt;span style="color:Blue;"&gt;string&lt;/span&gt;[] args)
	{
		&lt;span style="color:Green;"&gt;// create a list of integers from 1 to 20&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;var&lt;/span&gt; list = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="color:Blue;"&gt;int&lt;/span&gt;&amp;gt;();
		&lt;span style="color:Blue;"&gt;for&lt;/span&gt;(&lt;span style="color:Blue;"&gt;var&lt;/span&gt; i = 1; i &amp;lt;= 20; i++)
			list.Add(i);

		&lt;span style="color:Blue;"&gt;var&lt;/span&gt; firstPage = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; StaticPagedList(list, 0, 20, 100); &lt;span style="color:Green;"&gt;// first page&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is first page? {0}&amp;quot;&lt;/span&gt;, firstPage.IsFirstPage); &lt;span style="color:Green;"&gt;// true&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is last page? {0}&amp;quot;&lt;/span&gt;, firstPage.IsLastPage); &lt;span style="color:Green;"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;First value on page? {0}&amp;quot;&lt;/span&gt;, firstPage[0]); &lt;span style="color:Green;"&gt;// 1&lt;/span&gt;
		Console.WriteLine();

		&lt;span style="color:Blue;"&gt;var&lt;/span&gt; middlePage = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; StaticPagedList(list, 2, 20, 100); &lt;span style="color:Green;"&gt;// third page, same values&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is first page? {0}&amp;quot;&lt;/span&gt;, anotherPage.IsFirstPage); &lt;span style="color:Green;"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is last page? {0}&amp;quot;&lt;/span&gt;, anotherPage.IsLastPage); &lt;span style="color:Green;"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;First value on page? {0}&amp;quot;&lt;/span&gt;, anotherPage[0]); &lt;span style="color:Green;"&gt;// 1&lt;/span&gt;
		Console.WriteLine();

		&lt;span style="color:Blue;"&gt;var&lt;/span&gt; lastPage = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; StaticPagedList(list, 4, 20, 100); &lt;span style="color:Green;"&gt;// fifth page, same values&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is first page? {0}&amp;quot;&lt;/span&gt;, lastPage.IsFirstPage); &lt;span style="color:Green;"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is last page? {0}&amp;quot;&lt;/span&gt;, lastPage.IsLastPage); &lt;span style="color:Green;"&gt;// true&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;First value on page? {0}&amp;quot;&lt;/span&gt;, lastPage[0]); &lt;span style="color:Green;"&gt;// 1&lt;/span&gt;
		Console.WriteLine();
	}
}
&lt;/pre&gt;&lt;/div&gt;
&lt;h1&gt;Changes&lt;/h1&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;August 4, 2009&lt;/b&gt; Troy Goode adds a &lt;i&gt;StaticPagedList&lt;/i&gt; class for working with pre-divided sets of data (like those returned when querying the list of users in Membership).
&lt;ul&gt;&lt;li&gt;&lt;i&gt;PagedList&amp;lt;T&amp;gt;&lt;/i&gt; now derives from &lt;i&gt;BasePagedList&amp;lt;T&amp;gt;&lt;/i&gt;, where most of the work is done.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;StaticPagedList&amp;lt;T&amp;gt;&lt;/i&gt; created; also derives from &lt;i&gt;BasePagedList&amp;lt;T&amp;gt;&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Added batch scripts for building, testing, and creating a release.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>TroyGoode</author><pubDate>Tue, 04 Aug 2009 04:46:48 GMT</pubDate><guid isPermaLink="false">Updated Release: PagedList 1.1 (Aug 04, 2009) 20090804044648A</guid></item><item><title>Released: PagedList 1.1 (Aug 04, 2009)</title><link>http://pagedlist.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=31087</link><description>&lt;div&gt;&lt;h1&gt;Project Description&lt;/h1&gt;PagedList makes it easier for .Net developers to write paging code. It allows you to take any List&amp;#60;T&amp;#62; and by specifying the page size and desired page index, select only a subset of that list. PagedList also provides properties that are useful when building UI paging controls.&lt;br&gt;
&lt;h1&gt;Using PagedList&amp;lt;T&amp;gt;&lt;/h1&gt;&lt;div style="color:Black;background-color:White"&gt;&lt;pre&gt;
&lt;span style="color:Blue"&gt;using&lt;/span&gt; System;
&lt;span style="color:Blue"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span style="color:Blue"&gt;using&lt;/span&gt; PagedList;

&lt;span style="color:Blue"&gt;public&lt;/span&gt; &lt;span style="color:Blue"&gt;class&lt;/span&gt;&lt;span style="color:MediumTurquoise"&gt; Program
&lt;/span&gt;{
	&lt;span style="color:Blue"&gt;public&lt;/span&gt; &lt;span style="color:Blue"&gt;static&lt;/span&gt; &lt;span style="color:Blue"&gt;void&lt;/span&gt; Main(&lt;span style="color:Blue"&gt;string&lt;/span&gt;[] args)
	{
		&lt;span style="color:Green"&gt;// create a list of integers from 1 to 200&lt;/span&gt;
		&lt;span style="color:Blue"&gt;var&lt;/span&gt; list = &lt;span style="color:Blue"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="color:Blue"&gt;int&lt;/span&gt;&amp;gt;();
		&lt;span style="color:Blue"&gt;for&lt;/span&gt;(&lt;span style="color:Blue"&gt;var&lt;/span&gt; i = 1; i &amp;lt;= 200; i++)
			list.Add(i);

		&lt;span style="color:Blue"&gt;var&lt;/span&gt; firstPage = list.ToPagedList(0, 20); &lt;span style="color:Green"&gt;// first page, page size = 20&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Is first page? {0}&amp;quot;&lt;/span&gt;, firstPage.IsFirstPage); &lt;span style="color:Green"&gt;// true&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Is last page? {0}&amp;quot;&lt;/span&gt;, firstPage.IsLastPage); &lt;span style="color:Green"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;First value on page? {0}&amp;quot;&lt;/span&gt;, firstPage[0]); &lt;span style="color:Green"&gt;// 1&lt;/span&gt;
		Console.WriteLine();

		&lt;span style="color:Blue"&gt;var&lt;/span&gt; anotherPage = list.ToPagedList(4, 20); &lt;span style="color:Green"&gt;// fifth page, page size = 20&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Is first page? {0}&amp;quot;&lt;/span&gt;, anotherPage.IsFirstPage); &lt;span style="color:Green"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Is last page? {0}&amp;quot;&lt;/span&gt;, anotherPage.IsLastPage); &lt;span style="color:Green"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Total integers in list? {0}&amp;quot;&lt;/span&gt;, anotherPage.TotalItemCount); &lt;span style="color:Green"&gt;// 200&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Integers on this page? {0}&amp;quot;&lt;/span&gt;, anotherPage.Count); &lt;span style="color:Green"&gt;// 20&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;First value on page? {0}&amp;quot;&lt;/span&gt;, anotherPage[0]); &lt;span style="color:Green"&gt;// 81&lt;/span&gt;
		Console.WriteLine();

		&lt;span style="color:Blue"&gt;var&lt;/span&gt; lastPage = list.ToPagedList(9, 20); &lt;span style="color:Green"&gt;// last (tenth) page, page size = 20&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Is first page? {0}&amp;quot;&lt;/span&gt;, lastPage.IsFirstPage); &lt;span style="color:Green"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Is last page? {0}&amp;quot;&lt;/span&gt;, lastPage.IsLastPage); &lt;span style="color:Green"&gt;// true&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;First value on page? {0}&amp;quot;&lt;/span&gt;, lastPage[0]); &lt;span style="color:Green"&gt;// 181&lt;/span&gt;
		Console.ReadKey(&lt;span style="color:Blue"&gt;false&lt;/span&gt;);
	}
}
&lt;/pre&gt;&lt;/div&gt;
&lt;h1&gt;Using StaticPagedList&amp;lt;T&amp;gt;&lt;/h1&gt;&lt;div style="color:Black;background-color:White"&gt;&lt;pre&gt;
&lt;span style="color:Blue"&gt;using&lt;/span&gt; System;
&lt;span style="color:Blue"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span style="color:Blue"&gt;using&lt;/span&gt; PagedList;

&lt;span style="color:Blue"&gt;public&lt;/span&gt; &lt;span style="color:Blue"&gt;class&lt;/span&gt;&lt;span style="color:MediumTurquoise"&gt; Program
&lt;/span&gt;{
	&lt;span style="color:Blue"&gt;public&lt;/span&gt; &lt;span style="color:Blue"&gt;static&lt;/span&gt; &lt;span style="color:Blue"&gt;void&lt;/span&gt; Main(&lt;span style="color:Blue"&gt;string&lt;/span&gt;[] args)
	{
		&lt;span style="color:Green"&gt;// create a list of integers from 1 to 20&lt;/span&gt;
		&lt;span style="color:Blue"&gt;var&lt;/span&gt; list = &lt;span style="color:Blue"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="color:Blue"&gt;int&lt;/span&gt;&amp;gt;();
		&lt;span style="color:Blue"&gt;for&lt;/span&gt;(&lt;span style="color:Blue"&gt;var&lt;/span&gt; i = 1; i &amp;lt;= 20; i++)
			list.Add(i);

		&lt;span style="color:Blue"&gt;var&lt;/span&gt; firstPage = &lt;span style="color:Blue"&gt;new&lt;/span&gt; StaticPagedList(list, 0, 20, 100); &lt;span style="color:Green"&gt;// first page&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Is first page? {0}&amp;quot;&lt;/span&gt;, firstPage.IsFirstPage); &lt;span style="color:Green"&gt;// true&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Is last page? {0}&amp;quot;&lt;/span&gt;, firstPage.IsLastPage); &lt;span style="color:Green"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;First value on page? {0}&amp;quot;&lt;/span&gt;, firstPage[0]); &lt;span style="color:Green"&gt;// 1&lt;/span&gt;
		Console.WriteLine();

		&lt;span style="color:Blue"&gt;var&lt;/span&gt; middlePage = &lt;span style="color:Blue"&gt;new&lt;/span&gt; StaticPagedList(list, 2, 20, 100); &lt;span style="color:Green"&gt;// third page, same values&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Is first page? {0}&amp;quot;&lt;/span&gt;, anotherPage.IsFirstPage); &lt;span style="color:Green"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Is last page? {0}&amp;quot;&lt;/span&gt;, anotherPage.IsLastPage); &lt;span style="color:Green"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;First value on page? {0}&amp;quot;&lt;/span&gt;, anotherPage[0]); &lt;span style="color:Green"&gt;// 1&lt;/span&gt;
		Console.WriteLine();

		&lt;span style="color:Blue"&gt;var&lt;/span&gt; lastPage = &lt;span style="color:Blue"&gt;new&lt;/span&gt; StaticPagedList(list, 4, 20, 100); &lt;span style="color:Green"&gt;// fifth page, same values&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Is first page? {0}&amp;quot;&lt;/span&gt;, lastPage.IsFirstPage); &lt;span style="color:Green"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Is last page? {0}&amp;quot;&lt;/span&gt;, lastPage.IsLastPage); &lt;span style="color:Green"&gt;// true&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;First value on page? {0}&amp;quot;&lt;/span&gt;, lastPage[0]); &lt;span style="color:Green"&gt;// 1&lt;/span&gt;
		Console.WriteLine();
	}
}
&lt;/pre&gt;&lt;/div&gt;
&lt;h1&gt;Changes&lt;/h1&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;August 4, 2009&lt;/b&gt; Troy Goode adds a &lt;i&gt;StaticPagedList&lt;/i&gt; class for working with pre-divided sets of data (like those returned when querying the list of users in Membership).
&lt;ul&gt;&lt;li&gt;&lt;i&gt;PagedList&amp;lt;T&amp;gt;&lt;/i&gt; now derives from &lt;i&gt;BasePagedList&amp;lt;T&amp;gt;&lt;/i&gt;, where most of the work is done.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;StaticPagedList&amp;lt;T&amp;gt;&lt;/i&gt; created; also derives from &lt;i&gt;BasePagedList&amp;lt;T&amp;gt;&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Added batch scripts for building, testing, and creating a release.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;</description><author></author><pubDate>Tue, 04 Aug 2009 04:46:48 GMT</pubDate><guid isPermaLink="false">Released: PagedList 1.1 (Aug 04, 2009) 20090804044648A</guid></item><item><title>Updated Release: PagedList 1.1 (Aug 04, 2009)</title><link>http://pagedlist.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=31087</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Project Description&lt;/h1&gt;PagedList makes it easier for .Net developers to write paging code. It allows you to take any List&amp;#60;T&amp;#62; and by specifying the page size and desired page index, select only a subset of that list. PagedList also provides properties that are useful when building UI paging controls.&lt;br /&gt;
&lt;h1&gt;Using PagedList&amp;lt;T&amp;gt;&lt;/h1&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; System;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; PagedList;

&lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt;&lt;span style="color:MediumTurquoise;"&gt; Program
&lt;/span&gt;{
	&lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;static&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Main(&lt;span style="color:Blue;"&gt;string&lt;/span&gt;[] args)
	{
		&lt;span style="color:Green;"&gt;// create a list of integers from 1 to 200&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;var&lt;/span&gt; list = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="color:Blue;"&gt;int&lt;/span&gt;&amp;gt;();
		&lt;span style="color:Blue;"&gt;for&lt;/span&gt;(&lt;span style="color:Blue;"&gt;var&lt;/span&gt; i = 1; i &amp;lt;= 200; i++)
			list.Add(i);

		&lt;span style="color:Blue;"&gt;var&lt;/span&gt; firstPage = list.ToPagedList(0, 20); &lt;span style="color:Green;"&gt;// first page, page size = 20&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is first page? {0}&amp;quot;&lt;/span&gt;, firstPage.IsFirstPage); &lt;span style="color:Green;"&gt;// true&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is last page? {0}&amp;quot;&lt;/span&gt;, firstPage.IsLastPage); &lt;span style="color:Green;"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;First value on page? {0}&amp;quot;&lt;/span&gt;, firstPage[0]); &lt;span style="color:Green;"&gt;// 1&lt;/span&gt;
		Console.WriteLine();

		&lt;span style="color:Blue;"&gt;var&lt;/span&gt; anotherPage = list.ToPagedList(4, 20); &lt;span style="color:Green;"&gt;// fifth page, page size = 20&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is first page? {0}&amp;quot;&lt;/span&gt;, anotherPage.IsFirstPage); &lt;span style="color:Green;"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is last page? {0}&amp;quot;&lt;/span&gt;, anotherPage.IsLastPage); &lt;span style="color:Green;"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Total integers in list? {0}&amp;quot;&lt;/span&gt;, anotherPage.TotalItemCount); &lt;span style="color:Green;"&gt;// 200&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Integers on this page? {0}&amp;quot;&lt;/span&gt;, anotherPage.Count); &lt;span style="color:Green;"&gt;// 20&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;First value on page? {0}&amp;quot;&lt;/span&gt;, anotherPage[0]); &lt;span style="color:Green;"&gt;// 81&lt;/span&gt;
		Console.WriteLine();

		&lt;span style="color:Blue;"&gt;var&lt;/span&gt; lastPage = list.ToPagedList(9, 20); &lt;span style="color:Green;"&gt;// last (tenth) page, page size = 20&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is first page? {0}&amp;quot;&lt;/span&gt;, lastPage.IsFirstPage); &lt;span style="color:Green;"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is last page? {0}&amp;quot;&lt;/span&gt;, lastPage.IsLastPage); &lt;span style="color:Green;"&gt;// true&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;First value on page? {0}&amp;quot;&lt;/span&gt;, lastPage[0]); &lt;span style="color:Green;"&gt;// 181&lt;/span&gt;
		Console.ReadKey(&lt;span style="color:Blue;"&gt;false&lt;/span&gt;);
	}
}
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
&lt;h1&gt;Using StaticPagedList&amp;lt;T&amp;gt;&lt;/h1&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; System;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; PagedList;

&lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt;&lt;span style="color:MediumTurquoise;"&gt; Program
&lt;/span&gt;{
	&lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;static&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Main(&lt;span style="color:Blue;"&gt;string&lt;/span&gt;[] args)
	{
		&lt;span style="color:Green;"&gt;// create a list of integers from 1 to 20&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;var&lt;/span&gt; list = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="color:Blue;"&gt;int&lt;/span&gt;&amp;gt;();
		&lt;span style="color:Blue;"&gt;for&lt;/span&gt;(&lt;span style="color:Blue;"&gt;var&lt;/span&gt; i = 1; i &amp;lt;= 20; i++)
			list.Add(i);

		&lt;span style="color:Blue;"&gt;var&lt;/span&gt; firstPage = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; StaticPagedList(list, 0, 20, 100); &lt;span style="color:Green;"&gt;// first page&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is first page? {0}&amp;quot;&lt;/span&gt;, firstPage.IsFirstPage); &lt;span style="color:Green;"&gt;// true&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is last page? {0}&amp;quot;&lt;/span&gt;, firstPage.IsLastPage); &lt;span style="color:Green;"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;First value on page? {0}&amp;quot;&lt;/span&gt;, firstPage[0]); &lt;span style="color:Green;"&gt;// 1&lt;/span&gt;
		Console.WriteLine();

		&lt;span style="color:Blue;"&gt;var&lt;/span&gt; middlePage = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; StaticPagedList(list, 2, 20, 100); &lt;span style="color:Green;"&gt;// third page, same values&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is first page? {0}&amp;quot;&lt;/span&gt;, anotherPage.IsFirstPage); &lt;span style="color:Green;"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is last page? {0}&amp;quot;&lt;/span&gt;, anotherPage.IsLastPage); &lt;span style="color:Green;"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;First value on page? {0}&amp;quot;&lt;/span&gt;, anotherPage[0]); &lt;span style="color:Green;"&gt;// 1&lt;/span&gt;
		Console.WriteLine();

		&lt;span style="color:Blue;"&gt;var&lt;/span&gt; lastPage = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; StaticPagedList(list, 4, 20, 100); &lt;span style="color:Green;"&gt;// fifth page, same values&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is first page? {0}&amp;quot;&lt;/span&gt;, lastPage.IsFirstPage); &lt;span style="color:Green;"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is last page? {0}&amp;quot;&lt;/span&gt;, lastPage.IsLastPage); &lt;span style="color:Green;"&gt;// true&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;First value on page? {0}&amp;quot;&lt;/span&gt;, lastPage[0]); &lt;span style="color:Green;"&gt;// 1&lt;/span&gt;
		Console.WriteLine();
	}
}
&lt;/pre&gt;&lt;/div&gt;
&lt;h1&gt;Changes&lt;/h1&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;August 4, 2009&lt;/b&gt; Troy Goode adds a &lt;i&gt;StaticPagedList&lt;/i&gt; class for working with pre-divided sets of data (like those returned when querying the list of users in Membership).
&lt;ul&gt;&lt;li&gt;&lt;i&gt;PagedList&amp;lt;T&amp;gt;&lt;/i&gt; now derives from &lt;i&gt;BasePagedList&amp;lt;T&amp;gt;&lt;/i&gt;, where most of the work is done.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;StaticPagedList&amp;lt;T&amp;gt;&lt;/i&gt; created; also derives from &lt;i&gt;BasePagedList&amp;lt;T&amp;gt;&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Added batch scripts for building, testing, and creating a release.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>TroyGoode</author><pubDate>Tue, 04 Aug 2009 04:45:40 GMT</pubDate><guid isPermaLink="false">Updated Release: PagedList 1.1 (Aug 04, 2009) 20090804044540A</guid></item><item><title>Updated Wiki: Home</title><link>http://pagedlist.codeplex.com/Wiki/View.aspx?title=Home&amp;version=15</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Project Description&lt;/h1&gt;PagedList makes it easier for .Net developers to write paging code. It allows you to take any List&amp;#60;T&amp;#62; and by specifying the page size and desired page index, select only a subset of that list. PagedList also provides properties that are useful when building UI paging controls.&lt;br /&gt;
&lt;h1&gt;&lt;a href="http://pagedlist.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=31087"&gt;Download&lt;/a&gt;&lt;/h1&gt;
&lt;h1&gt;Using PagedList&amp;lt;T&amp;gt;&lt;/h1&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; System;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; PagedList;

&lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt;&lt;span style="color:MediumTurquoise;"&gt; Program
&lt;/span&gt;{
	&lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;static&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Main(&lt;span style="color:Blue;"&gt;string&lt;/span&gt;[] args)
	{
		&lt;span style="color:Green;"&gt;// create a list of integers from 1 to 200&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;var&lt;/span&gt; list = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="color:Blue;"&gt;int&lt;/span&gt;&amp;gt;();
		&lt;span style="color:Blue;"&gt;for&lt;/span&gt;(&lt;span style="color:Blue;"&gt;var&lt;/span&gt; i = 1; i &amp;lt;= 200; i++)
			list.Add(i);

		&lt;span style="color:Blue;"&gt;var&lt;/span&gt; firstPage = list.ToPagedList(0, 20); &lt;span style="color:Green;"&gt;// first page, page size = 20&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is first page? {0}&amp;quot;&lt;/span&gt;, firstPage.IsFirstPage); &lt;span style="color:Green;"&gt;// true&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is last page? {0}&amp;quot;&lt;/span&gt;, firstPage.IsLastPage); &lt;span style="color:Green;"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;First value on page? {0}&amp;quot;&lt;/span&gt;, firstPage[0]); &lt;span style="color:Green;"&gt;// 1&lt;/span&gt;
		Console.WriteLine();

		&lt;span style="color:Blue;"&gt;var&lt;/span&gt; anotherPage = list.ToPagedList(4, 20); &lt;span style="color:Green;"&gt;// fifth page, page size = 20&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is first page? {0}&amp;quot;&lt;/span&gt;, anotherPage.IsFirstPage); &lt;span style="color:Green;"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is last page? {0}&amp;quot;&lt;/span&gt;, anotherPage.IsLastPage); &lt;span style="color:Green;"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Total integers in list? {0}&amp;quot;&lt;/span&gt;, anotherPage.TotalItemCount); &lt;span style="color:Green;"&gt;// 200&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Integers on this page? {0}&amp;quot;&lt;/span&gt;, anotherPage.Count); &lt;span style="color:Green;"&gt;// 20&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;First value on page? {0}&amp;quot;&lt;/span&gt;, anotherPage[0]); &lt;span style="color:Green;"&gt;// 81&lt;/span&gt;
		Console.WriteLine();

		&lt;span style="color:Blue;"&gt;var&lt;/span&gt; lastPage = list.ToPagedList(9, 20); &lt;span style="color:Green;"&gt;// last (tenth) page, page size = 20&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is first page? {0}&amp;quot;&lt;/span&gt;, lastPage.IsFirstPage); &lt;span style="color:Green;"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is last page? {0}&amp;quot;&lt;/span&gt;, lastPage.IsLastPage); &lt;span style="color:Green;"&gt;// true&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;First value on page? {0}&amp;quot;&lt;/span&gt;, lastPage[0]); &lt;span style="color:Green;"&gt;// 181&lt;/span&gt;
		Console.ReadKey(&lt;span style="color:Blue;"&gt;false&lt;/span&gt;);
	}
}
&lt;/pre&gt;&lt;/div&gt;
&lt;h1&gt;Change Log&lt;/h1&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;August 4, 2009&lt;/b&gt; Troy Goode adds a &lt;i&gt;StaticPagedList&lt;/i&gt; class for working with pre-divided sets of data (like those returned when querying the list of users in Membership).
&lt;ul&gt;&lt;li&gt;&lt;i&gt;PagedList&amp;lt;T&amp;gt;&lt;/i&gt; now derives from &lt;i&gt;BasePagedList&amp;lt;T&amp;gt;&lt;/i&gt;, where most of the work is done.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;StaticPagedList&amp;lt;T&amp;gt;&lt;/i&gt; created; also derives from &lt;i&gt;BasePagedList&amp;lt;T&amp;gt;&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Added batch scripts for building, testing, and creating a release.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;June 11, 2009&lt;/b&gt; Troy Goode posts further tweaks to &lt;i&gt;PagedList&amp;lt;T&amp;gt;&lt;/i&gt; code, adds Intellisense documentation, adds source to CodePlex, and creates a signed release binary available for download via CodePlex.
&lt;ul&gt;&lt;li&gt;Eliminated extraneous call to .Skip(n) when n == 0. &lt;a href="http://blogs.teamb.com/craigstuntz/2009/06/10/38313/" class="externalLink"&gt;Reported by Craig Stuntz.&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Removed constructor overload to &lt;i&gt;PagedList&amp;lt;T&amp;gt;&lt;/i&gt; that accepted &lt;i&gt;IQueryable&amp;lt;T&amp;gt;&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Removed protected &lt;i&gt;Initialize&lt;/i&gt; method and moved code into only remaining constructor.&lt;/li&gt;
&lt;li&gt;Optimized constructor to work for &lt;i&gt;IEnumerable&amp;lt;T&amp;gt;&lt;/i&gt; or &lt;i&gt;IQueryable&amp;lt;T&amp;gt;&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Moved property calculations for &lt;i&gt;PageNumber&lt;/i&gt;, &lt;i&gt;HasPreviousPage&lt;/i&gt;, &lt;i&gt;HasNextPage&lt;/i&gt;, &lt;i&gt;IsFirstPage&lt;/i&gt;, and &lt;i&gt;IsLastPage&lt;/i&gt; from constructor to property getter. Given that these properties are not likely called in loops, the potential performance hit is likely made up for by the enhanced readability of the constructor code.&lt;/li&gt;
&lt;li&gt;Removed overload of &lt;i&gt;ToPagedList&lt;/i&gt; extension method that took &lt;i&gt;IQueryable&amp;lt;T&amp;gt;&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Renamed &lt;i&gt;Pagination&lt;/i&gt; static extensions methods class to &lt;i&gt;PagedListExtensions&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Added test to verify that when there are two pages of 1 item each, the second page will contain the correct item (the test passed). &lt;a href="http://www.squaredroot.com/2008/07/08/pagedlist-strikes-back/comment-page-1/#comment-55" class="externalLink"&gt;Suggested by Matt Bertulli.&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Moved code from &lt;i&gt;System.Collections.Generics&lt;/i&gt; namespace to &lt;i&gt;PagedList&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Created a solution just for PagedList related classes and signed the assembly using a private key generated just for PagedList.&lt;/li&gt;
&lt;li&gt;Added XML documentation for all interfaces, classes, methods, and properties.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;July 8, 2008&lt;/b&gt; Troy Goode &lt;a href="http://www.squaredroot.com/2008/07/08/PagedList-Strikes-Back/" class="externalLink"&gt;posts&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; further tweaks to &lt;i&gt;PagedList&amp;lt;T&amp;gt;&lt;/i&gt; code and supplies unit tests.
&lt;ul&gt;&lt;li&gt;Changed &lt;i&gt;IPagedList&lt;/i&gt; interface to &lt;i&gt;IPagedList&amp;lt;T&amp;gt;&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Added &lt;i&gt;PageNumber&lt;/i&gt; property.&lt;/li&gt;
&lt;li&gt;Added &lt;i&gt;TotalItemCount&lt;/i&gt; property.&lt;/li&gt;
&lt;li&gt;Added constructor overload to &lt;i&gt;PagedList&amp;lt;T&amp;gt;&lt;/i&gt; that accepts &lt;i&gt;IQueryable&amp;lt;T&amp;gt;&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Refactored constructor code into protected &lt;i&gt;Initialize&lt;/i&gt; method.&lt;/li&gt;
&lt;li&gt;Re-added overload of &lt;i&gt;ToPagedList&lt;/i&gt; extension method that takes &lt;i&gt;IQueryable&amp;lt;T&amp;gt;&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Added unit tests.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;April 4, 2008&lt;/b&gt; Troy Goode &lt;a href="http://www.squaredroot.com/2008/04/08/Updated-PagedList-Class/" class="externalLink"&gt;posts&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; further tweaks to &lt;i&gt;PagedList&amp;lt;T&amp;gt;&lt;/i&gt; code.
&lt;ul&gt;&lt;li&gt;Added &lt;i&gt;IPagedList&lt;/i&gt; interface. &lt;i&gt;PagedList&amp;lt;T&amp;gt;&lt;/i&gt; implemented &lt;i&gt;IPagedList&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Added &lt;i&gt;IsFirstPage&lt;/i&gt; property.&lt;/li&gt;
&lt;li&gt;Added &lt;i&gt;IsLastPage&lt;/i&gt; property.&lt;/li&gt;
&lt;li&gt;Removed overload of &lt;i&gt;ToPagedList&lt;/i&gt; extension method that took &lt;i&gt;IQueryable&amp;lt;T&amp;gt;&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Changed property value calculations in constructor.&lt;/li&gt;
&lt;li&gt;Moved code from &lt;i&gt;Mvc2.Helpers&lt;/i&gt; namespace to &lt;i&gt;System.Collections.Generics&lt;/i&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;April 4, 2008&lt;/b&gt; Robert Muehsig &lt;a href="http://code-inside.de/blog-in/2008/04/08/aspnet-mvc-pagination-view-user-control/" class="externalLink"&gt;posts&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; a sample MVC pagination control along with tweaks to &lt;i&gt;PagedList&amp;lt;T&amp;gt;&lt;/i&gt; code.
&lt;ul&gt;&lt;li&gt;Removed &lt;i&gt;IPagedList&lt;/i&gt; interface. &lt;i&gt;PagedList&amp;lt;T&amp;gt;&lt;/i&gt; no longer implements &lt;i&gt;IPagedList&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Added &lt;i&gt;TotalPages&lt;/i&gt; property.&lt;/li&gt;
&lt;li&gt;Renamed &lt;i&gt;IsPreviousPage&lt;/i&gt; property to &lt;i&gt;HasPreviousPage&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Renamed &lt;i&gt;IsNextPage&lt;/i&gt; property to &lt;i&gt;HasNextPage&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Moved code from &lt;i&gt;System.Web.Mvc&lt;/i&gt; namespace to &lt;i&gt;Mvc2.Helpers&lt;/i&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;December 10th, 2007&lt;/b&gt; Rob Conery &lt;a href="http://blog.wekeroad.com/blog/aspnet-mvc-pagedlistt" class="externalLink"&gt;posts&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; Scott Guthrie's &lt;i&gt;PagedList&amp;lt;T&amp;gt;&lt;/i&gt; code.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>TroyGoode</author><pubDate>Tue, 04 Aug 2009 04:45:21 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20090804044521A</guid></item><item><title>Updated Release: PagedList 1.1 (Aug 04, 2009)</title><link>http://pagedlist.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=31087</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Project Description&lt;/h1&gt;PagedList makes it easier for .Net developers to write paging code. It allows you to take any List&amp;#60;T&amp;#62; and by specifying the page size and desired page index, select only a subset of that list. PagedList also provides properties that are useful when building UI paging controls.&lt;br /&gt;
&lt;h1&gt;Using PagedList&amp;lt;T&amp;gt;&lt;/h1&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; System;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; PagedList;

&lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt;&lt;span style="color:MediumTurquoise;"&gt; Program
&lt;/span&gt;{
	&lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;static&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Main(&lt;span style="color:Blue;"&gt;string&lt;/span&gt;[] args)
	{
		&lt;span style="color:Green;"&gt;// create a list of integers from 1 to 200&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;var&lt;/span&gt; list = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="color:Blue;"&gt;int&lt;/span&gt;&amp;gt;();
		&lt;span style="color:Blue;"&gt;for&lt;/span&gt;(&lt;span style="color:Blue;"&gt;var&lt;/span&gt; i = 1; i &amp;lt;= 200; i++)
			list.Add(i);

		&lt;span style="color:Blue;"&gt;var&lt;/span&gt; firstPage = list.ToPagedList(0, 20); &lt;span style="color:Green;"&gt;// first page, page size = 20&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is first page? {0}&amp;quot;&lt;/span&gt;, firstPage.IsFirstPage); &lt;span style="color:Green;"&gt;// true&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is last page? {0}&amp;quot;&lt;/span&gt;, firstPage.IsLastPage); &lt;span style="color:Green;"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;First value on page? {0}&amp;quot;&lt;/span&gt;, firstPage[0]); &lt;span style="color:Green;"&gt;// 1&lt;/span&gt;
		Console.WriteLine();

		&lt;span style="color:Blue;"&gt;var&lt;/span&gt; anotherPage = list.ToPagedList(4, 20); &lt;span style="color:Green;"&gt;// fifth page, page size = 20&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is first page? {0}&amp;quot;&lt;/span&gt;, anotherPage.IsFirstPage); &lt;span style="color:Green;"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is last page? {0}&amp;quot;&lt;/span&gt;, anotherPage.IsLastPage); &lt;span style="color:Green;"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Total integers in list? {0}&amp;quot;&lt;/span&gt;, anotherPage.TotalItemCount); &lt;span style="color:Green;"&gt;// 200&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Integers on this page? {0}&amp;quot;&lt;/span&gt;, anotherPage.Count); &lt;span style="color:Green;"&gt;// 20&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;First value on page? {0}&amp;quot;&lt;/span&gt;, anotherPage[0]); &lt;span style="color:Green;"&gt;// 81&lt;/span&gt;
		Console.WriteLine();

		&lt;span style="color:Blue;"&gt;var&lt;/span&gt; lastPage = list.ToPagedList(9, 20); &lt;span style="color:Green;"&gt;// last (tenth) page, page size = 20&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is first page? {0}&amp;quot;&lt;/span&gt;, lastPage.IsFirstPage); &lt;span style="color:Green;"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is last page? {0}&amp;quot;&lt;/span&gt;, lastPage.IsLastPage); &lt;span style="color:Green;"&gt;// true&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;First value on page? {0}&amp;quot;&lt;/span&gt;, lastPage[0]); &lt;span style="color:Green;"&gt;// 181&lt;/span&gt;
		Console.ReadKey(&lt;span style="color:Blue;"&gt;false&lt;/span&gt;);
	}
}
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
&lt;h1&gt;Using StaticPagedList&amp;lt;T&amp;gt;&lt;/h1&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; System;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; PagedList;

&lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt;&lt;span style="color:MediumTurquoise;"&gt; Program
&lt;/span&gt;{
	&lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;static&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Main(&lt;span style="color:Blue;"&gt;string&lt;/span&gt;[] args)
	{
		&lt;span style="color:Green;"&gt;// create a list of integers from 1 to 20&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;var&lt;/span&gt; list = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="color:Blue;"&gt;int&lt;/span&gt;&amp;gt;();
		&lt;span style="color:Blue;"&gt;for&lt;/span&gt;(&lt;span style="color:Blue;"&gt;var&lt;/span&gt; i = 1; i &amp;lt;= 20; i++)
			list.Add(i);

		&lt;span style="color:Blue;"&gt;var&lt;/span&gt; firstPage = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; StaticPagedList(list, 0, 20, 100); &lt;span style="color:Green;"&gt;// first page&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is first page? {0}&amp;quot;&lt;/span&gt;, firstPage.IsFirstPage); &lt;span style="color:Green;"&gt;// true&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is last page? {0}&amp;quot;&lt;/span&gt;, firstPage.IsLastPage); &lt;span style="color:Green;"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;First value on page? {0}&amp;quot;&lt;/span&gt;, firstPage[0]); &lt;span style="color:Green;"&gt;// 1&lt;/span&gt;
		Console.WriteLine();

		&lt;span style="color:Blue;"&gt;var&lt;/span&gt; middlePage = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; StaticPagedList(list, 2, 20, 100); &lt;span style="color:Green;"&gt;// third page, same values&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is first page? {0}&amp;quot;&lt;/span&gt;, anotherPage.IsFirstPage); &lt;span style="color:Green;"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is last page? {0}&amp;quot;&lt;/span&gt;, anotherPage.IsLastPage); &lt;span style="color:Green;"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;First value on page? {0}&amp;quot;&lt;/span&gt;, anotherPage[0]); &lt;span style="color:Green;"&gt;// 1&lt;/span&gt;
		Console.WriteLine();

		&lt;span style="color:Blue;"&gt;var&lt;/span&gt; lastPage = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; StaticPagedList(list, 4, 20, 100); &lt;span style="color:Green;"&gt;// fifth page, same values&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is first page? {0}&amp;quot;&lt;/span&gt;, lastPage.IsFirstPage); &lt;span style="color:Green;"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is last page? {0}&amp;quot;&lt;/span&gt;, lastPage.IsLastPage); &lt;span style="color:Green;"&gt;// true&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;First value on page? {0}&amp;quot;&lt;/span&gt;, lastPage[0]); &lt;span style="color:Green;"&gt;// 1&lt;/span&gt;
		Console.WriteLine();
	}
}
&lt;/pre&gt;&lt;/div&gt;
&lt;h1&gt;Changes&lt;/h1&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;August 4, 2009&lt;/b&gt; Troy Goode adds a StaticPagedList class for working with pre-divided sets of data (like that returned when querying the list of users in Membership).
&lt;ul&gt;&lt;li&gt;PagedList&amp;lt;T&amp;gt; now derives from BasePagedList&amp;lt;T&amp;gt;, where most of the work is done.&lt;/li&gt;
&lt;li&gt;StaticPagedList&amp;lt;T&amp;gt; created; also derives from BasePagedList&amp;lt;T&amp;gt;.&lt;/li&gt;
&lt;li&gt;Added batch scripts for building, testing, and creating a release.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>TroyGoode</author><pubDate>Tue, 04 Aug 2009 04:43:56 GMT</pubDate><guid isPermaLink="false">Updated Release: PagedList 1.1 (Aug 04, 2009) 20090804044356A</guid></item><item><title>Updated Wiki: Home</title><link>http://pagedlist.codeplex.com/Wiki/View.aspx?title=Home&amp;version=14</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Project Description&lt;/h1&gt;PagedList makes it easier for .Net developers to write paging code. It allows you to take any List&amp;#60;T&amp;#62; and by specifying the page size and desired page index, select only a subset of that list. PagedList also provides properties that are useful when building UI paging controls.&lt;br /&gt;
&lt;h1&gt;&lt;a href="http://pagedlist.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=31087"&gt;Download&lt;/a&gt;&lt;/h1&gt;
&lt;h1&gt;Using PagedList&amp;lt;T&amp;gt;&lt;/h1&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; System;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; PagedList;

&lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt;&lt;span style="color:MediumTurquoise;"&gt; Program
&lt;/span&gt;{
	&lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;static&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Main(&lt;span style="color:Blue;"&gt;string&lt;/span&gt;[] args)
	{
		&lt;span style="color:Green;"&gt;// create a list of integers from 1 to 200&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;var&lt;/span&gt; list = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="color:Blue;"&gt;int&lt;/span&gt;&amp;gt;();
		&lt;span style="color:Blue;"&gt;for&lt;/span&gt;(&lt;span style="color:Blue;"&gt;var&lt;/span&gt; i = 1; i &amp;lt;= 200; i++)
			list.Add(i);

		&lt;span style="color:Blue;"&gt;var&lt;/span&gt; firstPage = list.ToPagedList(0, 20); &lt;span style="color:Green;"&gt;// first page, page size = 20&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is first page? {0}&amp;quot;&lt;/span&gt;, firstPage.IsFirstPage); &lt;span style="color:Green;"&gt;// true&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is last page? {0}&amp;quot;&lt;/span&gt;, firstPage.IsLastPage); &lt;span style="color:Green;"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;First value on page? {0}&amp;quot;&lt;/span&gt;, firstPage[0]); &lt;span style="color:Green;"&gt;// 1&lt;/span&gt;
		Console.WriteLine();

		&lt;span style="color:Blue;"&gt;var&lt;/span&gt; anotherPage = list.ToPagedList(4, 20); &lt;span style="color:Green;"&gt;// fifth page, page size = 20&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is first page? {0}&amp;quot;&lt;/span&gt;, anotherPage.IsFirstPage); &lt;span style="color:Green;"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is last page? {0}&amp;quot;&lt;/span&gt;, anotherPage.IsLastPage); &lt;span style="color:Green;"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Total integers in list? {0}&amp;quot;&lt;/span&gt;, anotherPage.TotalItemCount); &lt;span style="color:Green;"&gt;// 200&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Integers on this page? {0}&amp;quot;&lt;/span&gt;, anotherPage.Count); &lt;span style="color:Green;"&gt;// 20&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;First value on page? {0}&amp;quot;&lt;/span&gt;, anotherPage[0]); &lt;span style="color:Green;"&gt;// 81&lt;/span&gt;
		Console.WriteLine();

		&lt;span style="color:Blue;"&gt;var&lt;/span&gt; lastPage = list.ToPagedList(9, 20); &lt;span style="color:Green;"&gt;// last (tenth) page, page size = 20&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is first page? {0}&amp;quot;&lt;/span&gt;, lastPage.IsFirstPage); &lt;span style="color:Green;"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Is last page? {0}&amp;quot;&lt;/span&gt;, lastPage.IsLastPage); &lt;span style="color:Green;"&gt;// true&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;First value on page? {0}&amp;quot;&lt;/span&gt;, lastPage[0]); &lt;span style="color:Green;"&gt;// 181&lt;/span&gt;
		Console.ReadKey(&lt;span style="color:Blue;"&gt;false&lt;/span&gt;);
	}
}
&lt;/pre&gt;&lt;/div&gt;
&lt;h1&gt;Change Log&lt;/h1&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;August 4, 2009&lt;/b&gt; Troy Goode adds a StaticPagedList class for working with pre-divided sets of data (like that returned when querying the list of users in Membership).
&lt;ul&gt;&lt;li&gt;PagedList&amp;lt;T&amp;gt; now derives from BasePagedList&amp;lt;T&amp;gt;, where most of the work is done.&lt;/li&gt;
&lt;li&gt;StaticPagedList&amp;lt;T&amp;gt; created; also derives from BasePagedList&amp;lt;T&amp;gt;.&lt;/li&gt;
&lt;li&gt;Added batch scripts for building, testing, and creating a release.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;June 11, 2009&lt;/b&gt; Troy Goode posts further tweaks to &lt;i&gt;PagedList&amp;lt;T&amp;gt;&lt;/i&gt; code, adds Intellisense documentation, adds source to CodePlex, and creates a signed release binary available for download via CodePlex.
&lt;ul&gt;&lt;li&gt;Eliminated extraneous call to .Skip(n) when n == 0. &lt;a href="http://blogs.teamb.com/craigstuntz/2009/06/10/38313/" class="externalLink"&gt;Reported by Craig Stuntz.&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Removed constructor overload to &lt;i&gt;PagedList&amp;lt;T&amp;gt;&lt;/i&gt; that accepted &lt;i&gt;IQueryable&amp;lt;T&amp;gt;&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Removed protected &lt;i&gt;Initialize&lt;/i&gt; method and moved code into only remaining constructor.&lt;/li&gt;
&lt;li&gt;Optimized constructor to work for &lt;i&gt;IEnumerable&amp;lt;T&amp;gt;&lt;/i&gt; or &lt;i&gt;IQueryable&amp;lt;T&amp;gt;&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Moved property calculations for &lt;i&gt;PageNumber&lt;/i&gt;, &lt;i&gt;HasPreviousPage&lt;/i&gt;, &lt;i&gt;HasNextPage&lt;/i&gt;, &lt;i&gt;IsFirstPage&lt;/i&gt;, and &lt;i&gt;IsLastPage&lt;/i&gt; from constructor to property getter. Given that these properties are not likely called in loops, the potential performance hit is likely made up for by the enhanced readability of the constructor code.&lt;/li&gt;
&lt;li&gt;Removed overload of &lt;i&gt;ToPagedList&lt;/i&gt; extension method that took &lt;i&gt;IQueryable&amp;lt;T&amp;gt;&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Renamed &lt;i&gt;Pagination&lt;/i&gt; static extensions methods class to &lt;i&gt;PagedListExtensions&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Added test to verify that when there are two pages of 1 item each, the second page will contain the correct item (the test passed). &lt;a href="http://www.squaredroot.com/2008/07/08/pagedlist-strikes-back/comment-page-1/#comment-55" class="externalLink"&gt;Suggested by Matt Bertulli.&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Moved code from &lt;i&gt;System.Collections.Generics&lt;/i&gt; namespace to &lt;i&gt;PagedList&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Created a solution just for PagedList related classes and signed the assembly using a private key generated just for PagedList.&lt;/li&gt;
&lt;li&gt;Added XML documentation for all interfaces, classes, methods, and properties.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;July 8, 2008&lt;/b&gt; Troy Goode &lt;a href="http://www.squaredroot.com/2008/07/08/PagedList-Strikes-Back/" class="externalLink"&gt;posts&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; further tweaks to &lt;i&gt;PagedList&amp;lt;T&amp;gt;&lt;/i&gt; code and supplies unit tests.
&lt;ul&gt;&lt;li&gt;Changed &lt;i&gt;IPagedList&lt;/i&gt; interface to &lt;i&gt;IPagedList&amp;lt;T&amp;gt;&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Added &lt;i&gt;PageNumber&lt;/i&gt; property.&lt;/li&gt;
&lt;li&gt;Added &lt;i&gt;TotalItemCount&lt;/i&gt; property.&lt;/li&gt;
&lt;li&gt;Added constructor overload to &lt;i&gt;PagedList&amp;lt;T&amp;gt;&lt;/i&gt; that accepts &lt;i&gt;IQueryable&amp;lt;T&amp;gt;&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Refactored constructor code into protected &lt;i&gt;Initialize&lt;/i&gt; method.&lt;/li&gt;
&lt;li&gt;Re-added overload of &lt;i&gt;ToPagedList&lt;/i&gt; extension method that takes &lt;i&gt;IQueryable&amp;lt;T&amp;gt;&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Added unit tests.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;April 4, 2008&lt;/b&gt; Troy Goode &lt;a href="http://www.squaredroot.com/2008/04/08/Updated-PagedList-Class/" class="externalLink"&gt;posts&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; further tweaks to &lt;i&gt;PagedList&amp;lt;T&amp;gt;&lt;/i&gt; code.
&lt;ul&gt;&lt;li&gt;Added &lt;i&gt;IPagedList&lt;/i&gt; interface. &lt;i&gt;PagedList&amp;lt;T&amp;gt;&lt;/i&gt; implemented &lt;i&gt;IPagedList&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Added &lt;i&gt;IsFirstPage&lt;/i&gt; property.&lt;/li&gt;
&lt;li&gt;Added &lt;i&gt;IsLastPage&lt;/i&gt; property.&lt;/li&gt;
&lt;li&gt;Removed overload of &lt;i&gt;ToPagedList&lt;/i&gt; extension method that took &lt;i&gt;IQueryable&amp;lt;T&amp;gt;&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Changed property value calculations in constructor.&lt;/li&gt;
&lt;li&gt;Moved code from &lt;i&gt;Mvc2.Helpers&lt;/i&gt; namespace to &lt;i&gt;System.Collections.Generics&lt;/i&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;April 4, 2008&lt;/b&gt; Robert Muehsig &lt;a href="http://code-inside.de/blog-in/2008/04/08/aspnet-mvc-pagination-view-user-control/" class="externalLink"&gt;posts&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; a sample MVC pagination control along with tweaks to &lt;i&gt;PagedList&amp;lt;T&amp;gt;&lt;/i&gt; code.
&lt;ul&gt;&lt;li&gt;Removed &lt;i&gt;IPagedList&lt;/i&gt; interface. &lt;i&gt;PagedList&amp;lt;T&amp;gt;&lt;/i&gt; no longer implements &lt;i&gt;IPagedList&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Added &lt;i&gt;TotalPages&lt;/i&gt; property.&lt;/li&gt;
&lt;li&gt;Renamed &lt;i&gt;IsPreviousPage&lt;/i&gt; property to &lt;i&gt;HasPreviousPage&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Renamed &lt;i&gt;IsNextPage&lt;/i&gt; property to &lt;i&gt;HasNextPage&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Moved code from &lt;i&gt;System.Web.Mvc&lt;/i&gt; namespace to &lt;i&gt;Mvc2.Helpers&lt;/i&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;December 10th, 2007&lt;/b&gt; Rob Conery &lt;a href="http://blog.wekeroad.com/blog/aspnet-mvc-pagedlistt" class="externalLink"&gt;posts&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; Scott Guthrie's &lt;i&gt;PagedList&amp;lt;T&amp;gt;&lt;/i&gt; code.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>TroyGoode</author><pubDate>Tue, 04 Aug 2009 04:42:52 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20090804044252A</guid></item><item><title>Source code checked in, #24471</title><link>http://pagedlist.codeplex.com/SourceControl/changeset/view/24471</link><description>Added &amp;#34;StaticPagedList&amp;#34; for using IPagedList&amp;#60;T&amp;#62; with pre-paged data &amp;#40;like when retrieving a list of users from Membership&amp;#41;.</description><author>TroyGoode</author><pubDate>Tue, 04 Aug 2009 04:29:36 GMT</pubDate><guid isPermaLink="false">Source code checked in, #24471 20090804042936A</guid></item><item><title>Source code checked in, #24468</title><link>http://pagedlist.codeplex.com/SourceControl/changeset/view/24468</link><description>Changed all &amp;#34;private set&amp;#34; to &amp;#34;protected set&amp;#34;.</description><author>TroyGoode</author><pubDate>Tue, 04 Aug 2009 03:51:55 GMT</pubDate><guid isPermaLink="false">Source code checked in, #24468 20090804035155A</guid></item><item><title>Updated Release: PagedList 1.0 (Jun 11, 2009)</title><link>http://pagedlist.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=28585</link><description>&lt;div&gt;&lt;h1&gt;Project Description&lt;/h1&gt;PagedList makes it easier for .Net developers to write paging code. It allows you to take any List&amp;#60;T&amp;#62; and by specifying the page size and desired page index, select only a subset of that list. PagedList also provides properties that are useful when building UI paging controls.&lt;br&gt;
&lt;h1&gt;Using PagedList&amp;lt;T&amp;gt;&lt;/h1&gt;&lt;div style="color:Black;background-color:White"&gt;&lt;pre&gt;
&lt;span style="color:Blue"&gt;using&lt;/span&gt; System;
&lt;span style="color:Blue"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span style="color:Blue"&gt;using&lt;/span&gt; PagedList;

&lt;span style="color:Blue"&gt;public&lt;/span&gt; &lt;span style="color:Blue"&gt;class&lt;/span&gt;&lt;span style="color:MediumTurquoise"&gt; Program
&lt;/span&gt;{
	&lt;span style="color:Blue"&gt;public&lt;/span&gt; &lt;span style="color:Blue"&gt;static&lt;/span&gt; &lt;span style="color:Blue"&gt;void&lt;/span&gt; Main(&lt;span style="color:Blue"&gt;string&lt;/span&gt;[] args)
	{
		&lt;span style="color:Green"&gt;// create a list of integers from 1 to 200&lt;/span&gt;
		var list = &lt;span style="color:Blue"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="color:Blue"&gt;int&lt;/span&gt;&amp;gt;();
		&lt;span style="color:Blue"&gt;for&lt;/span&gt;(var i = 1; i &amp;lt;= 200; i++)
			list.Add(i);

		var firstPage = list.ToPagedList(0, 20); &lt;span style="color:Green"&gt;// first page, page size = 20&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Is first page? {0}&amp;quot;&lt;/span&gt;, firstPage.IsFirstPage); &lt;span style="color:Green"&gt;// true&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Is last page? {0}&amp;quot;&lt;/span&gt;, firstPage.IsLastPage); &lt;span style="color:Green"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;First value on page? {0}&amp;quot;&lt;/span&gt;, firstPage[0]); &lt;span style="color:Green"&gt;// 1&lt;/span&gt;
		Console.WriteLine();

		var anotherPage = list.ToPagedList(4, 20); &lt;span style="color:Green"&gt;// fifth page, page size = 20&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Is first page? {0}&amp;quot;&lt;/span&gt;, anotherPage.IsFirstPage); &lt;span style="color:Green"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Is last page? {0}&amp;quot;&lt;/span&gt;, anotherPage.IsLastPage); &lt;span style="color:Green"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Total integers in list? {0}&amp;quot;&lt;/span&gt;, anotherPage.TotalItemCount); &lt;span style="color:Green"&gt;// 200&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Integers on this page? {0}&amp;quot;&lt;/span&gt;, anotherPage.Count); &lt;span style="color:Green"&gt;// 20&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;First value on page? {0}&amp;quot;&lt;/span&gt;, anotherPage[0]); &lt;span style="color:Green"&gt;// 81&lt;/span&gt;
		Console.WriteLine();

		var lastPage = list.ToPagedList(9, 20); &lt;span style="color:Green"&gt;// last (tenth) page, page size = 20&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Is first page? {0}&amp;quot;&lt;/span&gt;, lastPage.IsFirstPage); &lt;span style="color:Green"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Is last page? {0}&amp;quot;&lt;/span&gt;, lastPage.IsLastPage); &lt;span style="color:Green"&gt;// true&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;First value on page? {0}&amp;quot;&lt;/span&gt;, lastPage[0]); &lt;span style="color:Green"&gt;// 181&lt;/span&gt;
		Console.ReadKey(&lt;span style="color:Blue"&gt;false&lt;/span&gt;);
	}
}
&lt;/pre&gt;&lt;/div&gt;
&lt;h1&gt;Changes&lt;/h1&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;June 11, 2009&lt;/b&gt; Troy Goode posts further tweaks to &lt;i&gt;PagedList&amp;lt;T&amp;gt;&lt;/i&gt; code, adds Intellisense documentation, adds source to CodePlex, and creates a signed release binary available for download via CodePlex.
&lt;ul&gt;&lt;li&gt;Eliminated extraneous call to .Skip(n) when n == 0. &lt;a href="http://blogs.teamb.com/craigstuntz/2009/06/10/38313/"&gt;Reported by Craig Stuntz.&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Removed constructor overload to &lt;i&gt;PagedList&amp;lt;T&amp;gt;&lt;/i&gt; that accepted &lt;i&gt;IQueryable&amp;lt;T&amp;gt;&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Removed protected &lt;i&gt;Initialize&lt;/i&gt; method and moved code into only remaining constructor.&lt;/li&gt;
&lt;li&gt;Optimized constructor to work for &lt;i&gt;IEnumerable&amp;lt;T&amp;gt;&lt;/i&gt; or &lt;i&gt;IQueryable&amp;lt;T&amp;gt;&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Moved property calculations for &lt;i&gt;PageNumber&lt;/i&gt;, &lt;i&gt;HasPreviousPage&lt;/i&gt;, &lt;i&gt;HasNextPage&lt;/i&gt;, &lt;i&gt;IsFirstPage&lt;/i&gt;, and &lt;i&gt;IsLastPage&lt;/i&gt; from constructor to property getter. Given that these properties are not likely called in loops, the potential performance hit is likely made up for by the enhanced readability of the constructor code.&lt;/li&gt;
&lt;li&gt;Removed overload of &lt;i&gt;ToPagedList&lt;/i&gt; extension method that took &lt;i&gt;IQueryable&amp;lt;T&amp;gt;&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Renamed &lt;i&gt;Pagination&lt;/i&gt; static extensions methods class to &lt;i&gt;PagedListExtensions&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Added test to verify that when there are two pages of 1 item each, the second page will contain the correct item (the test passed). &lt;a href="http://www.squaredroot.com/2008/07/08/pagedlist-strikes-back/comment-page-1/#comment-55"&gt;Suggested by Matt Bertulli.&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Moved code from &lt;i&gt;System.Collections.Generics&lt;/i&gt; namespace to &lt;i&gt;PagedList&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Created a solution just for PagedList related classes and signed the assembly using a private key generated just for PagedList.&lt;/li&gt;
&lt;li&gt;Added XML documentation for all interfaces, classes, methods, and properties.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;</description><author>TroyGoode</author><pubDate>Thu, 11 Jun 2009 23:24:12 GMT</pubDate><guid isPermaLink="false">Updated Release: PagedList 1.0 (Jun 11, 2009) 20090611112412P</guid></item><item><title>Released: PagedList 1.0 (Jun 11, 2009)</title><link>http://pagedlist.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=28585</link><description>&lt;div&gt;&lt;h1&gt;Project Description&lt;/h1&gt;PagedList makes it easier for .Net developers to write paging code. It allows you to take any List&amp;#60;T&amp;#62; and by specifying the page size and desired page index, select only a subset of that list. PagedList also provides properties that are useful when building UI paging controls.&lt;br&gt;
&lt;h1&gt;Using PagedList&amp;lt;T&amp;gt;&lt;/h1&gt;&lt;div style="color:Black;background-color:White"&gt;&lt;pre&gt;
&lt;span style="color:Blue"&gt;using&lt;/span&gt; System;
&lt;span style="color:Blue"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span style="color:Blue"&gt;using&lt;/span&gt; PagedList;

&lt;span style="color:Blue"&gt;public&lt;/span&gt; &lt;span style="color:Blue"&gt;class&lt;/span&gt;&lt;span style="color:MediumTurquoise"&gt; Program
&lt;/span&gt;{
	&lt;span style="color:Blue"&gt;public&lt;/span&gt; &lt;span style="color:Blue"&gt;static&lt;/span&gt; &lt;span style="color:Blue"&gt;void&lt;/span&gt; Main(&lt;span style="color:Blue"&gt;string&lt;/span&gt;[] args)
	{
		&lt;span style="color:Green"&gt;// create a list of integers from 1 to 200&lt;/span&gt;
		var list = &lt;span style="color:Blue"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="color:Blue"&gt;int&lt;/span&gt;&amp;gt;();
		&lt;span style="color:Blue"&gt;for&lt;/span&gt;(var i = 1; i &amp;lt;= 200; i++)
			list.Add(i);

		var firstPage = list.ToPagedList(0, 20); &lt;span style="color:Green"&gt;// first page, page size = 20&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Is first page? {0}&amp;quot;&lt;/span&gt;, firstPage.IsFirstPage); &lt;span style="color:Green"&gt;// true&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Is last page? {0}&amp;quot;&lt;/span&gt;, firstPage.IsLastPage); &lt;span style="color:Green"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;First value on page? {0}&amp;quot;&lt;/span&gt;, firstPage[0]); &lt;span style="color:Green"&gt;// 1&lt;/span&gt;
		Console.WriteLine();

		var anotherPage = list.ToPagedList(4, 20); &lt;span style="color:Green"&gt;// fifth page, page size = 20&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Is first page? {0}&amp;quot;&lt;/span&gt;, anotherPage.IsFirstPage); &lt;span style="color:Green"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Is last page? {0}&amp;quot;&lt;/span&gt;, anotherPage.IsLastPage); &lt;span style="color:Green"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Total integers in list? {0}&amp;quot;&lt;/span&gt;, anotherPage.TotalItemCount); &lt;span style="color:Green"&gt;// 200&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Integers on this page? {0}&amp;quot;&lt;/span&gt;, anotherPage.Count); &lt;span style="color:Green"&gt;// 20&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;First value on page? {0}&amp;quot;&lt;/span&gt;, anotherPage[0]); &lt;span style="color:Green"&gt;// 81&lt;/span&gt;
		Console.WriteLine();

		var lastPage = list.ToPagedList(9, 20); &lt;span style="color:Green"&gt;// last (tenth) page, page size = 20&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Is first page? {0}&amp;quot;&lt;/span&gt;, lastPage.IsFirstPage); &lt;span style="color:Green"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Is last page? {0}&amp;quot;&lt;/span&gt;, lastPage.IsLastPage); &lt;span style="color:Green"&gt;// true&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;First value on page? {0}&amp;quot;&lt;/span&gt;, lastPage[0]); &lt;span style="color:Green"&gt;// 181&lt;/span&gt;
		Console.ReadKey(&lt;span style="color:Blue"&gt;false&lt;/span&gt;);
	}
}
&lt;/pre&gt;&lt;/div&gt;
&lt;h1&gt;Changes&lt;/h1&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;June 11, 2009&lt;/b&gt; Troy Goode posts further tweaks to &lt;i&gt;PagedList&amp;lt;T&amp;gt;&lt;/i&gt; code, adds Intellisense documentation, adds source to CodePlex, and creates a signed release binary available for download via CodePlex.
&lt;ul&gt;&lt;li&gt;Eliminated extraneous call to .Skip(n) when n == 0. &lt;a href="http://blogs.teamb.com/craigstuntz/2009/06/10/38313/"&gt;Reported by Craig Stuntz.&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Removed constructor overload to &lt;i&gt;PagedList&amp;lt;T&amp;gt;&lt;/i&gt; that accepted &lt;i&gt;IQueryable&amp;lt;T&amp;gt;&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Removed protected &lt;i&gt;Initialize&lt;/i&gt; method and moved code into only remaining constructor.&lt;/li&gt;
&lt;li&gt;Optimized constructor to work for &lt;i&gt;IEnumerable&amp;lt;T&amp;gt;&lt;/i&gt; or &lt;i&gt;IQueryable&amp;lt;T&amp;gt;&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Moved property calculations for &lt;i&gt;PageNumber&lt;/i&gt;, &lt;i&gt;HasPreviousPage&lt;/i&gt;, &lt;i&gt;HasNextPage&lt;/i&gt;, &lt;i&gt;IsFirstPage&lt;/i&gt;, and &lt;i&gt;IsLastPage&lt;/i&gt; from constructor to property getter. Given that these properties are not likely called in loops, the potential performance hit is likely made up for by the enhanced readability of the constructor code.&lt;/li&gt;
&lt;li&gt;Removed overload of &lt;i&gt;ToPagedList&lt;/i&gt; extension method that took &lt;i&gt;IQueryable&amp;lt;T&amp;gt;&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Renamed &lt;i&gt;Pagination&lt;/i&gt; static extensions methods class to &lt;i&gt;PagedListExtensions&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Added test to verify that when there are two pages of 1 item each, the second page will contain the correct item (the test passed). &lt;a href="http://www.squaredroot.com/2008/07/08/pagedlist-strikes-back/comment-page-1/#comment-55"&gt;Suggested by Matt Bertulli.&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Moved code from &lt;i&gt;System.Collections.Generics&lt;/i&gt; namespace to &lt;i&gt;PagedList&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Created a solution just for PagedList related classes and signed the assembly using a private key generated just for PagedList.&lt;/li&gt;
&lt;li&gt;Added XML documentation for all interfaces, classes, methods, and properties.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;</description><author></author><pubDate>Thu, 11 Jun 2009 23:24:12 GMT</pubDate><guid isPermaLink="false">Released: PagedList 1.0 (Jun 11, 2009) 20090611112412P</guid></item><item><title>Updated Release: PagedList 1.0 (Jun 11, 2009)</title><link>http://pagedlist.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=28585</link><description>&lt;div&gt;&lt;h1&gt;Project Description&lt;/h1&gt;PagedList makes it easier for .Net developers to write paging code. It allows you to take any List&amp;#60;T&amp;#62; and by specifying the page size and desired page index, select only a subset of that list. PagedList also provides properties that are useful when building UI paging controls.&lt;br&gt;
&lt;h1&gt;Using PagedList&amp;lt;T&amp;gt;&lt;/h1&gt;&lt;div style="color:Black;background-color:White"&gt;&lt;pre&gt;
&lt;span style="color:Blue"&gt;using&lt;/span&gt; System;
&lt;span style="color:Blue"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span style="color:Blue"&gt;using&lt;/span&gt; PagedList;

&lt;span style="color:Blue"&gt;public&lt;/span&gt; &lt;span style="color:Blue"&gt;class&lt;/span&gt;&lt;span style="color:MediumTurquoise"&gt; Program
&lt;/span&gt;{
	&lt;span style="color:Blue"&gt;public&lt;/span&gt; &lt;span style="color:Blue"&gt;static&lt;/span&gt; &lt;span style="color:Blue"&gt;void&lt;/span&gt; Main(&lt;span style="color:Blue"&gt;string&lt;/span&gt;[] args)
	{
		&lt;span style="color:Green"&gt;// create a list of integers from 1 to 200&lt;/span&gt;
		var list = &lt;span style="color:Blue"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="color:Blue"&gt;int&lt;/span&gt;&amp;gt;();
		&lt;span style="color:Blue"&gt;for&lt;/span&gt;(var i = 1; i &amp;lt;= 200; i++)
			list.Add(i);

		var firstPage = list.ToPagedList(0, 20); &lt;span style="color:Green"&gt;// first page, page size = 20&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Is first page? {0}&amp;quot;&lt;/span&gt;, firstPage.IsFirstPage); &lt;span style="color:Green"&gt;// true&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Is last page? {0}&amp;quot;&lt;/span&gt;, firstPage.IsLastPage); &lt;span style="color:Green"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;First value on page? {0}&amp;quot;&lt;/span&gt;, firstPage[0]); &lt;span style="color:Green"&gt;// 1&lt;/span&gt;
		Console.WriteLine();

		var anotherPage = list.ToPagedList(4, 20); &lt;span style="color:Green"&gt;// fifth page, page size = 20&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Is first page? {0}&amp;quot;&lt;/span&gt;, anotherPage.IsFirstPage); &lt;span style="color:Green"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Is last page? {0}&amp;quot;&lt;/span&gt;, anotherPage.IsLastPage); &lt;span style="color:Green"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Total integers in list? {0}&amp;quot;&lt;/span&gt;, anotherPage.TotalItemCount); &lt;span style="color:Green"&gt;// 200&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Integers on this page? {0}&amp;quot;&lt;/span&gt;, anotherPage.Count); &lt;span style="color:Green"&gt;// 20&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;First value on page? {0}&amp;quot;&lt;/span&gt;, anotherPage[0]); &lt;span style="color:Green"&gt;// 81&lt;/span&gt;
		Console.WriteLine();

		var lastPage = list.ToPagedList(9, 20); &lt;span style="color:Green"&gt;// last (tenth) page, page size = 20&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Is first page? {0}&amp;quot;&lt;/span&gt;, lastPage.IsFirstPage); &lt;span style="color:Green"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Is last page? {0}&amp;quot;&lt;/span&gt;, lastPage.IsLastPage); &lt;span style="color:Green"&gt;// true&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;First value on page? {0}&amp;quot;&lt;/span&gt;, lastPage[0]); &lt;span style="color:Green"&gt;// 181&lt;/span&gt;
		Console.ReadKey(&lt;span style="color:Blue"&gt;false&lt;/span&gt;);
	}
}
&lt;/pre&gt;&lt;/div&gt;
&lt;h1&gt;Changes&lt;/h1&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;June 11, 2009&lt;/b&gt; Troy Goode posts further tweaks to &lt;i&gt;PagedList&amp;lt;T&amp;gt;&lt;/i&gt; code, adds Intellisense documentation, adds source to CodePlex, and creates a signed release binary available for download via CodePlex.
&lt;ul&gt;&lt;li&gt;Eliminated extraneous call to .Skip(n) when n == 0. &lt;a href="http://blogs.teamb.com/craigstuntz/2009/06/10/38313/"&gt;Reported by Craig Stuntz.&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Removed constructor overload to &lt;i&gt;PagedList&amp;lt;T&amp;gt;&lt;/i&gt; that accepted &lt;i&gt;IQueryable&amp;lt;T&amp;gt;&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Removed protected &lt;i&gt;Initialize&lt;/i&gt; method and moved code into only remaining constructor.&lt;/li&gt;
&lt;li&gt;Optimized constructor to work for &lt;i&gt;IEnumerable&amp;lt;T&amp;gt;&lt;/i&gt; or &lt;i&gt;IQueryable&amp;lt;T&amp;gt;&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Moved property calculations for &lt;i&gt;PageNumber&lt;/i&gt;, &lt;i&gt;HasPreviousPage&lt;/i&gt;, &lt;i&gt;HasNextPage&lt;/i&gt;, &lt;i&gt;IsFirstPage&lt;/i&gt;, and &lt;i&gt;IsLastPage&lt;/i&gt; from constructor to property getter. Given that these properties are not likely called in loops, the potential performance hit is likely made up for by the enhanced readability of the constructor code.&lt;/li&gt;
&lt;li&gt;Removed overload of &lt;i&gt;ToPagedList&lt;/i&gt; extension method that took &lt;i&gt;IQueryable&amp;lt;T&amp;gt;&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Renamed &lt;i&gt;Pagination&lt;/i&gt; static extensions methods class to &lt;i&gt;PagedListExtensions&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Added test to verify that when there are two pages of 1 item each, the second page will contain the correct item (the test passed). &lt;a href="http://www.squaredroot.com/2008/07/08/pagedlist-strikes-back/comment-page-1/#comment-55"&gt;Suggested by Matt Bertulli.&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Moved code from &lt;i&gt;System.Collections.Generics&lt;/i&gt; namespace to &lt;i&gt;PagedList&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Created a solution just for PagedList related classes and signed the assembly using a private key generated just for PagedList.&lt;/li&gt;
&lt;li&gt;Added XML documentation for all interfaces, classes, methods, and properties.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;</description><author>TroyGoode</author><pubDate>Thu, 11 Jun 2009 05:50:35 GMT</pubDate><guid isPermaLink="false">Updated Release: PagedList 1.0 (Jun 11, 2009) 20090611055035A</guid></item><item><title>Released: PagedList 1.0 (Jun 11, 2009)</title><link>http://pagedlist.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=28585</link><description>&lt;div&gt;&lt;h1&gt;Project Description&lt;/h1&gt;PagedList makes it easier for .Net developers to write paging code. It allows you to take any List&amp;#60;T&amp;#62; and by specifying the page size and desired page index, select only a subset of that list. PagedList also provides properties that are useful when building UI paging controls.&lt;br&gt;
&lt;h1&gt;Using PagedList&amp;lt;T&amp;gt;&lt;/h1&gt;&lt;div style="color:Black;background-color:White"&gt;&lt;pre&gt;
&lt;span style="color:Blue"&gt;using&lt;/span&gt; System;
&lt;span style="color:Blue"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span style="color:Blue"&gt;using&lt;/span&gt; PagedList;

&lt;span style="color:Blue"&gt;public&lt;/span&gt; &lt;span style="color:Blue"&gt;class&lt;/span&gt;&lt;span style="color:MediumTurquoise"&gt; Program
&lt;/span&gt;{
	&lt;span style="color:Blue"&gt;public&lt;/span&gt; &lt;span style="color:Blue"&gt;static&lt;/span&gt; &lt;span style="color:Blue"&gt;void&lt;/span&gt; Main(&lt;span style="color:Blue"&gt;string&lt;/span&gt;[] args)
	{
		&lt;span style="color:Green"&gt;// create a list of integers from 1 to 200&lt;/span&gt;
		var list = &lt;span style="color:Blue"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="color:Blue"&gt;int&lt;/span&gt;&amp;gt;();
		&lt;span style="color:Blue"&gt;for&lt;/span&gt;(var i = 1; i &amp;lt;= 200; i++)
			list.Add(i);

		var firstPage = list.ToPagedList(0, 20); &lt;span style="color:Green"&gt;// first page, page size = 20&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Is first page? {0}&amp;quot;&lt;/span&gt;, firstPage.IsFirstPage); &lt;span style="color:Green"&gt;// true&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Is last page? {0}&amp;quot;&lt;/span&gt;, firstPage.IsLastPage); &lt;span style="color:Green"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;First value on page? {0}&amp;quot;&lt;/span&gt;, firstPage[0]); &lt;span style="color:Green"&gt;// 1&lt;/span&gt;
		Console.WriteLine();

		var anotherPage = list.ToPagedList(4, 20); &lt;span style="color:Green"&gt;// fifth page, page size = 20&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Is first page? {0}&amp;quot;&lt;/span&gt;, anotherPage.IsFirstPage); &lt;span style="color:Green"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Is last page? {0}&amp;quot;&lt;/span&gt;, anotherPage.IsLastPage); &lt;span style="color:Green"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Total integers in list? {0}&amp;quot;&lt;/span&gt;, anotherPage.TotalItemCount); &lt;span style="color:Green"&gt;// 200&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Integers on this page? {0}&amp;quot;&lt;/span&gt;, anotherPage.Count); &lt;span style="color:Green"&gt;// 20&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;First value on page? {0}&amp;quot;&lt;/span&gt;, anotherPage[0]); &lt;span style="color:Green"&gt;// 81&lt;/span&gt;
		Console.WriteLine();

		var lastPage = list.ToPagedList(9, 20); &lt;span style="color:Green"&gt;// last (tenth) page, page size = 20&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Is first page? {0}&amp;quot;&lt;/span&gt;, lastPage.IsFirstPage); &lt;span style="color:Green"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Is last page? {0}&amp;quot;&lt;/span&gt;, lastPage.IsLastPage); &lt;span style="color:Green"&gt;// true&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;First value on page? {0}&amp;quot;&lt;/span&gt;, lastPage[0]); &lt;span style="color:Green"&gt;// 181&lt;/span&gt;
		Console.ReadKey(&lt;span style="color:Blue"&gt;false&lt;/span&gt;);
	}
}
&lt;/pre&gt;&lt;/div&gt;
&lt;h1&gt;Changes&lt;/h1&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;June 11, 2009&lt;/b&gt; Troy Goode posts further tweaks to &lt;i&gt;PagedList&amp;lt;T&amp;gt;&lt;/i&gt; code, adds Intellisense documentation, adds source to CodePlex, and creates a signed release binary available for download via CodePlex.
&lt;ul&gt;&lt;li&gt;Eliminated extraneous call to .Skip(n) when n == 0. &lt;a href="http://blogs.teamb.com/craigstuntz/2009/06/10/38313/"&gt;Reported by Craig Stuntz.&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Removed constructor overload to &lt;i&gt;PagedList&amp;lt;T&amp;gt;&lt;/i&gt; that accepted &lt;i&gt;IQueryable&amp;lt;T&amp;gt;&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Removed protected &lt;i&gt;Initialize&lt;/i&gt; method and moved code into only remaining constructor.&lt;/li&gt;
&lt;li&gt;Optimized constructor to work for &lt;i&gt;IEnumerable&amp;lt;T&amp;gt;&lt;/i&gt; or &lt;i&gt;IQueryable&amp;lt;T&amp;gt;&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Moved property calculations for &lt;i&gt;PageNumber&lt;/i&gt;, &lt;i&gt;HasPreviousPage&lt;/i&gt;, &lt;i&gt;HasNextPage&lt;/i&gt;, &lt;i&gt;IsFirstPage&lt;/i&gt;, and &lt;i&gt;IsLastPage&lt;/i&gt; from constructor to property getter. Given that these properties are not likely called in loops, the potential performance hit is likely made up for by the enhanced readability of the constructor code.&lt;/li&gt;
&lt;li&gt;Removed overload of &lt;i&gt;ToPagedList&lt;/i&gt; extension method that took &lt;i&gt;IQueryable&amp;lt;T&amp;gt;&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Renamed &lt;i&gt;Pagination&lt;/i&gt; static extensions methods class to &lt;i&gt;PagedListExtensions&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Added test to verify that when there are two pages of 1 item each, the second page will contain the correct item (the test passed). &lt;a href="http://www.squaredroot.com/2008/07/08/pagedlist-strikes-back/comment-page-1/#comment-55"&gt;Suggested by Matt Bertulli.&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Moved code from &lt;i&gt;System.Collections.Generics&lt;/i&gt; namespace to &lt;i&gt;PagedList&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Created a solution just for PagedList related classes and signed the assembly using a private key generated just for PagedList.&lt;/li&gt;
&lt;li&gt;Added XML documentation for all interfaces, classes, methods, and properties.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;</description><author></author><pubDate>Thu, 11 Jun 2009 05:50:35 GMT</pubDate><guid isPermaLink="false">Released: PagedList 1.0 (Jun 11, 2009) 20090611055035A</guid></item><item><title>Updated Release: PagedList 1.0 (Jun 10, 2009)</title><link>http://pagedlist.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=28585</link><description>&lt;div&gt;&lt;h1&gt;Project Description&lt;/h1&gt;PagedList makes it easier for .Net developers to write paging code. It allows you to take any List&amp;#60;T&amp;#62; and by specifying the page size and desired page index, select only a subset of that list. PagedList also provides properties that are useful when building UI paging controls.&lt;br&gt;
&lt;h1&gt;Using PagedList&amp;lt;T&amp;gt;&lt;/h1&gt;&lt;div style="color:Black;background-color:White"&gt;&lt;pre&gt;
&lt;span style="color:Blue"&gt;using&lt;/span&gt; System;
&lt;span style="color:Blue"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span style="color:Blue"&gt;using&lt;/span&gt; PagedList;

&lt;span style="color:Blue"&gt;public&lt;/span&gt; &lt;span style="color:Blue"&gt;class&lt;/span&gt;&lt;span style="color:MediumTurquoise"&gt; Program
&lt;/span&gt;{
	&lt;span style="color:Blue"&gt;public&lt;/span&gt; &lt;span style="color:Blue"&gt;static&lt;/span&gt; &lt;span style="color:Blue"&gt;void&lt;/span&gt; Main(&lt;span style="color:Blue"&gt;string&lt;/span&gt;[] args)
	{
		&lt;span style="color:Green"&gt;// create a list of integers from 1 to 200&lt;/span&gt;
		var list = &lt;span style="color:Blue"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="color:Blue"&gt;int&lt;/span&gt;&amp;gt;();
		&lt;span style="color:Blue"&gt;for&lt;/span&gt;(var i = 1; i &amp;lt;= 200; i++)
			list.Add(i);

		var firstPage = list.ToPagedList(0, 20); &lt;span style="color:Green"&gt;// first page, page size = 20&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Is first page? {0}&amp;quot;&lt;/span&gt;, firstPage.IsFirstPage); &lt;span style="color:Green"&gt;// true&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Is last page? {0}&amp;quot;&lt;/span&gt;, firstPage.IsLastPage); &lt;span style="color:Green"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;First value on page? {0}&amp;quot;&lt;/span&gt;, firstPage[0]); &lt;span style="color:Green"&gt;// 1&lt;/span&gt;
		Console.WriteLine();

		var anotherPage = list.ToPagedList(4, 20); &lt;span style="color:Green"&gt;// fifth page, page size = 20&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Is first page? {0}&amp;quot;&lt;/span&gt;, anotherPage.IsFirstPage); &lt;span style="color:Green"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Is last page? {0}&amp;quot;&lt;/span&gt;, anotherPage.IsLastPage); &lt;span style="color:Green"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Total integers in list? {0}&amp;quot;&lt;/span&gt;, anotherPage.TotalItemCount); &lt;span style="color:Green"&gt;// 200&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Integers on this page? {0}&amp;quot;&lt;/span&gt;, anotherPage.Count); &lt;span style="color:Green"&gt;// 20&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;First value on page? {0}&amp;quot;&lt;/span&gt;, anotherPage[0]); &lt;span style="color:Green"&gt;// 81&lt;/span&gt;
		Console.WriteLine();

		var lastPage = list.ToPagedList(9, 20); &lt;span style="color:Green"&gt;// last (tenth) page, page size = 20&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Is first page? {0}&amp;quot;&lt;/span&gt;, lastPage.IsFirstPage); &lt;span style="color:Green"&gt;// false&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;Is last page? {0}&amp;quot;&lt;/span&gt;, lastPage.IsLastPage); &lt;span style="color:Green"&gt;// true&lt;/span&gt;
		Console.WriteLine(&lt;span style="color:#A31515"&gt;&amp;quot;First value on page? {0}&amp;quot;&lt;/span&gt;, lastPage[0]); &lt;span style="color:Green"&gt;// 181&lt;/span&gt;
		Console.ReadKey(&lt;span style="color:Blue"&gt;false&lt;/span&gt;);
	}
}
&lt;/pre&gt;&lt;/div&gt;
&lt;h1&gt;Changes&lt;/h1&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;June 11, 2009&lt;/b&gt; Troy Goode posts further tweaks to &lt;i&gt;PagedList&amp;lt;T&amp;gt;&lt;/i&gt; code, adds Intellisense documentation, adds source to CodePlex, and creates a signed release binary available for download via CodePlex.
&lt;ul&gt;&lt;li&gt;Eliminated extraneous call to .Skip(n) when n == 0. &lt;a href="http://blogs.teamb.com/craigstuntz/2009/06/10/38313/"&gt;Reported by Craig Stuntz.&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Removed constructor overload to &lt;i&gt;PagedList&amp;lt;T&amp;gt;&lt;/i&gt; that accepted &lt;i&gt;IQueryable&amp;lt;T&amp;gt;&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Removed protected &lt;i&gt;Initialize&lt;/i&gt; method and moved code into only remaining constructor.&lt;/li&gt;
&lt;li&gt;Optimized constructor to work for &lt;i&gt;IEnumerable&amp;lt;T&amp;gt;&lt;/i&gt; or &lt;i&gt;IQueryable&amp;lt;T&amp;gt;&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Moved property calculations for &lt;i&gt;PageNumber&lt;/i&gt;, &lt;i&gt;HasPreviousPage&lt;/i&gt;, &lt;i&gt;HasNextPage&lt;/i&gt;, &lt;i&gt;IsFirstPage&lt;/i&gt;, and &lt;i&gt;IsLastPage&lt;/i&gt; from constructor to property getter. Given that these properties are not likely called in loops, the potential performance hit is likely made up for by the enhanced readability of the constructor code.&lt;/li&gt;
&lt;li&gt;Removed overload of &lt;i&gt;ToPagedList&lt;/i&gt; extension method that took &lt;i&gt;IQueryable&amp;lt;T&amp;gt;&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Renamed &lt;i&gt;Pagination&lt;/i&gt; static extensions methods class to &lt;i&gt;PagedListExtensions&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Added test to verify that when there are two pages of 1 item each, the second page will contain the correct item (the test passed). &lt;a href="http://www.squaredroot.com/2008/07/08/pagedlist-strikes-back/comment-page-1/#comment-55"&gt;Suggested by Matt Bertulli.&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Moved code from &lt;i&gt;System.Collections.Generics&lt;/i&gt; namespace to &lt;i&gt;PagedList&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Created a solution just for PagedList related classes and signed the assembly using a private key generated just for PagedList.&lt;/li&gt;
&lt;li&gt;Added XML documentation for all interfaces, classes, methods, and properties.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;</description><author>TroyGoode</author><pubDate>Thu, 11 Jun 2009 05:49:06 GMT</pubDate><guid isPermaLink="false">Updated Release: PagedList 1.0 (Jun 10, 2009) 20090611054906A</guid></item><item><title>Updated Release: PagedList 1.0 (Jun 10, 2009)</title><link>http://pagedlist.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=28585</link><description>&lt;div&gt;Lorem ipsum dolor.&lt;/div&gt;</description><author>TroyGoode</author><pubDate>Thu, 11 Jun 2009 04:58:33 GMT</pubDate><guid isPermaLink="false">Updated Release: PagedList 1.0 (Jun 10, 2009) 20090611045833A</guid></item><item><title>Source code checked in, #20090</title><link>http://pagedlist.codeplex.com/SourceControl/ListDownloadableCommits.aspx</link><description>Added additional test case &amp;#40;which passed&amp;#41; as suggested by Matt Bertulli.</description><author>TroyGoode</author><pubDate>Thu, 11 Jun 2009 04:56:30 GMT</pubDate><guid isPermaLink="false">Source code checked in, #20090 20090611045630A</guid></item><item><title>Updated Release: PagedList 1.0 (Jun 10, 2009)</title><link>http://pagedlist.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=28585</link><description>&lt;div&gt;Lorem ipsum dolor.&lt;/div&gt;</description><author>TroyGoode</author><pubDate>Thu, 11 Jun 2009 04:42:05 GMT</pubDate><guid isPermaLink="false">Updated Release: PagedList 1.0 (Jun 10, 2009) 20090611044205A</guid></item></channel></rss>