<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://fusionovation.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">Steven’s Blog</title><subtitle type="html" /><id>http://fusionovation.com/blogs/sapplegate/atom.aspx</id><link rel="alternate" type="text/html" href="http://fusionovation.com/blogs/sapplegate/default.aspx" /><link rel="self" type="application/atom+xml" href="http://fusionovation.com/blogs/sapplegate/atom.aspx" /><generator uri="http://communityserver.org" version="3.1.20917.1142">Community Server</generator><updated>2010-02-03T12:41:00Z</updated><entry><title>Sorting/Filtering a generic List using delegates</title><link rel="alternate" type="text/html" href="http://fusionovation.com/blogs/sapplegate/archive/2010/02/03/sorting-filtering-a-generic-list-using-delegates.aspx" /><id>http://fusionovation.com/blogs/sapplegate/archive/2010/02/03/sorting-filtering-a-generic-list-using-delegates.aspx</id><published>2010-02-03T16:41:00Z</published><updated>2010-02-03T16:41:00Z</updated><content type="html">&lt;p&gt;This is a nice little technique to easily sort a generic List using delegates. Say you have the following class:&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;div style="BORDER-BOTTOM:#000000 1px solid;BORDER-LEFT:#000000 1px solid;PADDING-BOTTOM:10px;BACKGROUND-COLOR:#dddddd;PADDING-LEFT:10px;PADDING-RIGHT:10px;FONT-FAMILY:Courier New;BORDER-TOP:#000000 1px solid;BORDER-RIGHT:#000000 1px solid;PADDING-TOP:10px;"&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;public&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;class&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;&lt;font color="#2b91af" size="2"&gt;Product&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;{&lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;int&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; _ProductID;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;private&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;string&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; _Name;&lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;decimal&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; _Price;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;public&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; Product(&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;int&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; productid, &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;string&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; name, &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;decimal&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; price)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _ProductID = productid;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _Name = name;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _Price = price;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;int&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; ProductID&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;get&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; { &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;return&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; _ProductID; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;set&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; { _ProductID = &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;value&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;string&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; Name&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;get&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; { &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;return&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; _Name; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;set&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; { _Name = &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;value&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;decimal&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; Price&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;get&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; { &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;return&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; _Price; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;set&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; { _Price = &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;value&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;/font&gt;}&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;First, we&amp;#39;ll create a Product list and fill it with products:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="BORDER-BOTTOM:#000000 1px solid;BORDER-LEFT:#000000 1px solid;PADDING-BOTTOM:10px;BACKGROUND-COLOR:#dddddd;PADDING-LEFT:10px;PADDING-RIGHT:10px;FONT-FAMILY:Courier New;BORDER-TOP:#000000 1px solid;BORDER-RIGHT:#000000 1px solid;PADDING-TOP:10px;"&gt;&lt;font color="#2b91af" size="2"&gt;&lt;font color="#2b91af" size="2"&gt;List&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;&lt;font color="#2b91af" size="2"&gt;Product&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&amp;gt;&lt;/font&gt; products = GetAllProducts();&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Now, let&amp;#39;s&amp;nbsp;say you want to filter the products, and only get products that have a price of more than $40.&amp;nbsp; You can filter the list by using the FindAll() method, using anonymous delegates instead of predicates:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="BORDER-BOTTOM:#000000 1px solid;BORDER-LEFT:#000000 1px solid;PADDING-BOTTOM:10px;BACKGROUND-COLOR:#dddddd;PADDING-LEFT:10px;PADDING-RIGHT:10px;FONT-FAMILY:Courier New;BORDER-TOP:#000000 1px solid;BORDER-RIGHT:#000000 1px solid;PADDING-TOP:10px;"&gt;&lt;font size="2"&gt;products = products.FindAll(&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;delegate&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;(&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;&lt;font color="#2b91af" size="2"&gt;Product&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; p) { &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;return&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; p.Price &amp;gt; 40; });&lt;/div&gt;&lt;/font&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;You can sort a generic list the same way.&amp;nbsp; Usually, to sort a custom class, you&amp;#39;d have to have your class inherit from the IComparable interface, and implement your own CompareTo method.&amp;nbsp; But using anonymous delegates, you can use the Sort method any way you want with just a single line of code. This will sort the list by Name ascending:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="BORDER-BOTTOM:#000000 1px solid;BORDER-LEFT:#000000 1px solid;PADDING-BOTTOM:10px;BACKGROUND-COLOR:#dddddd;PADDING-LEFT:10px;PADDING-RIGHT:10px;FONT-FAMILY:Courier New;BORDER-TOP:#000000 1px solid;BORDER-RIGHT:#000000 1px solid;PADDING-TOP:10px;"&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;products.Sort(&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;delegate&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;(&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;&lt;font color="#2b91af" size="2"&gt;Product&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; p1, &lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;&lt;font color="#2b91af" size="2"&gt;Product&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; p2) { &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;return&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; p1.Name.CompareTo(p2.Name); });&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;So there you have it. Using anonymous delegates, you can sort and filter an entire generic list using only two lines of code.&lt;br /&gt;&lt;br /&gt;A few more examples:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="BORDER-BOTTOM:#000000 1px solid;BORDER-LEFT:#000000 1px solid;PADDING-BOTTOM:10px;BACKGROUND-COLOR:#dddddd;PADDING-LEFT:10px;PADDING-RIGHT:10px;FONT-FAMILY:Courier New;BORDER-TOP:#000000 1px solid;BORDER-RIGHT:#000000 1px solid;PADDING-TOP:10px;"&gt;&lt;font size="2"&gt;&lt;font color="#008000" size="2"&gt;&lt;font color="#008000" size="2"&gt;//Filter list to only get products that start with the letter A&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;products = products.FindAll(&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;delegate&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;(&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;&lt;font color="#2b91af" size="2"&gt;Product&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; p) { &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;return&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; p.Name.ToLower().StartsWith(&lt;/font&gt;&lt;font color="#a31515" size="2"&gt;&lt;font color="#a31515" size="2"&gt;&amp;quot;a&amp;quot;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;); });&lt;br /&gt;&lt;br /&gt;&lt;font color="#008000" size="2"&gt;&lt;font color="#008000" size="2"&gt;//Filter over a price range&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;products = products.FindAll(&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;delegate&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;(&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;&lt;font color="#2b91af" size="2"&gt;Product&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; p) { &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;return&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; (p.Price &amp;gt; 20 &amp;amp;&amp;amp; p.Price &amp;lt; 60); });&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#008000" size="2"&gt;&lt;font color="#008000" size="2"&gt;//Sort by Name descending&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;products.Sort(&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;delegate&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;(&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;&lt;font color="#2b91af" size="2"&gt;Product&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; p1, &lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;&lt;font color="#2b91af" size="2"&gt;Product&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; p2) { &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;return&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; p2.Name.CompareTo(p1.Name); });&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;&lt;img src="http://fusionovation.com/aggbug.aspx?PostID=105" width="1" height="1"&gt;</content><author><name>sapplegate</name><uri>http://fusionovation.com/members/sapplegate.aspx</uri></author><category term="ASP.NET C#" scheme="http://fusionovation.com/blogs/sapplegate/archive/tags/ASP.NET+C_2300_/default.aspx" /></entry></feed>
