<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6332768823423107845</id><updated>2011-09-15T14:17:54.811-05:00</updated><category term='LINQ'/><category term='reflection'/><category term='LightSwitch'/><category term='Hanselminutes'/><category term='MVVM'/><category term='SQL'/><category term='Query Performance'/><category term='Scott Hanselman'/><category term='Development Patterns'/><category term='CTEs'/><category term='c#'/><category term='MvvmLight'/><category term='IQueryable'/><category term='generics'/><category term='.net framework 3.0'/><category term='PDF Viewers'/><category term='Mono'/><category term='Query optimization'/><category term='T-SQL'/><category term='Laurent Bugnion'/><category term='Repository Pattern'/><category term='delegated events'/><category term='.NET Rocks'/><category term='WPF'/><category term='.NET'/><category term='Utilities'/><title type='text'>On The Line</title><subtitle type='html'>Views &amp;amp; Tips from Software Development&amp;#39;s Front Line</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://frontlinesoftwaredev.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6332768823423107845/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://frontlinesoftwaredev.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Greg.Wernke</name><uri>http://www.blogger.com/profile/03457582135459633625</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>13</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6332768823423107845.post-3554586949108647256</id><published>2010-12-18T23:08:00.002-06:00</published><updated>2010-12-18T23:13:23.603-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MVVM'/><category scheme='http://www.blogger.com/atom/ns#' term='Hanselminutes'/><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><category scheme='http://www.blogger.com/atom/ns#' term='Laurent Bugnion'/><category scheme='http://www.blogger.com/atom/ns#' term='MvvmLight'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='Scott Hanselman'/><title type='text'>Model View View Model Template: The MVVM Light Toolkit</title><content type='html'>I was catching up on my pod casts last week caught a great one on&amp;nbsp;&lt;a href="http://www.hanselminutes.com/default.aspx"&gt;Hanselminutes&lt;/a&gt;&amp;nbsp;featuring&lt;a href="http://blog.galasoft.ch/"&gt;&amp;nbsp;&lt;span class="Apple-style-span" style="font-size: 16px;"&gt;Laurent Bugnion&lt;/span&gt;&lt;/a&gt;&amp;nbsp;discussing &lt;a href="http://www.hanselminutes.com/default.aspx?showID=260"&gt;Model-View, View-Model&lt;/a&gt; (&lt;a href="http://www.hanselminutes.com/default.aspx?showID=260"&gt;MVVM&lt;/a&gt;). &amp;nbsp;Laurent did a great job of describing MVVM in&amp;nbsp;this&amp;nbsp;cast and I&amp;nbsp;recommended&amp;nbsp;it to all who would like a sound grounding in MVVM.&amp;nbsp;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;&amp;nbsp;My thanks to them both.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;During the cast Laurent mentioned a number of MVVM frameworks, including his own called&amp;nbsp;&lt;a href="http://www.galasoft.ch/mvvm/getstarted/"&gt;MVVM Light Toolkit&lt;/a&gt;. &amp;nbsp;I've been checking it out and like what I see so far. &amp;nbsp;In particular I love the EventToCommand behavior class &lt;span class="Apple-style-span" style="font-family: inherit;"&gt;available in the&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit; line-height: 18px;"&gt;&lt;em style="border-bottom-style: none; border-bottom-width: 0px; border-color: inherit; border-left-style: none; border-left-width: 0px; border-right-style: none; border-right-width: 0px; border-top-style: none; border-top-width: 0px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;GalaSoft.MvvmLight.Extras&lt;/em&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit; line-height: 18px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;library. &amp;nbsp;If I'm reading this right this lib will allow you to convert WPF events to commands. &amp;nbsp;This addresses one of my biggest complaints about doing MVVM with WPF. &amp;nbsp;The MVVM "ideal" is no event code in the code behind, but&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;this&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;&amp;nbsp;is tough because many of the WPF&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;components&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;&amp;nbsp;don't have command&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;capability&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;&amp;nbsp;built in to them &amp;amp; frankly you need many of the events in order to craft a functional UI. &amp;nbsp;Hopefully this lib will deal with this lack.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;I will be checking this out more&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;throughly&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;&amp;nbsp;in the coming weeks &amp;amp; will let you know how usefull this turns out to be.&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6332768823423107845-3554586949108647256?l=frontlinesoftwaredev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frontlinesoftwaredev.blogspot.com/feeds/3554586949108647256/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://frontlinesoftwaredev.blogspot.com/2010/12/model-view-view-model-template-mvvm.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6332768823423107845/posts/default/3554586949108647256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6332768823423107845/posts/default/3554586949108647256'/><link rel='alternate' type='text/html' href='http://frontlinesoftwaredev.blogspot.com/2010/12/model-view-view-model-template-mvvm.html' title='Model View View Model Template: The MVVM Light Toolkit'/><author><name>Greg.Wernke</name><uri>http://www.blogger.com/profile/03457582135459633625</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6332768823423107845.post-8849562895874056975</id><published>2010-12-07T19:48:00.000-06:00</published><updated>2010-12-07T19:48:48.222-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Query optimization'/><category scheme='http://www.blogger.com/atom/ns#' term='LINQ'/><title type='text'>Quick Tip: LINQ Queries Require Optimization Too.</title><content type='html'>&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;Recently I was asked by a colleague to look at a poorly performing LINQ query that was taking an unreasonable amount of time to execute (&amp;gt; 3 min).  It didn't require much investigation to see that the query needed reordering of its joins and limiting of the elements returned.  Once we rearranged the joins (inner joins first!) and limited the elements returned in the select, the query times dropped to under a sec.&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;This made me review some of my own LINQ queries and sure enough I had often made the same mistakes as my colleague did. &amp;nbsp;I bet if you review your own&amp;nbsp;LINQ&amp;nbsp;queries you may find the same issues.&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;Lesson learned by me today? &amp;nbsp; You should take care of how you form your LINQ statements. &amp;nbsp;LINQ is just different enough to make you lose sight of the fact its a query language.&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;See my earlier &lt;a href="http://frontlinesoftwaredev.blogspot.com/2010/02/three-t-sql-tricks-courtesy-of-some.html"&gt;post&lt;/a&gt;&amp;nbsp;on SQL query optimization.  The tips outlined in this post will apply to LINQ queries as well. &amp;nbsp;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6332768823423107845-8849562895874056975?l=frontlinesoftwaredev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frontlinesoftwaredev.blogspot.com/feeds/8849562895874056975/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://frontlinesoftwaredev.blogspot.com/2010/12/quick-tip-linq-queries-require.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6332768823423107845/posts/default/8849562895874056975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6332768823423107845/posts/default/8849562895874056975'/><link rel='alternate' type='text/html' href='http://frontlinesoftwaredev.blogspot.com/2010/12/quick-tip-linq-queries-require.html' title='Quick Tip: LINQ Queries Require Optimization Too.'/><author><name>Greg.Wernke</name><uri>http://www.blogger.com/profile/03457582135459633625</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6332768823423107845.post-8586349639585759450</id><published>2010-09-24T23:08:00.001-05:00</published><updated>2010-09-30T13:09:44.042-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET Rocks'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='LightSwitch'/><title type='text'>Microsoft Light Switch - a New LOB Development Tool</title><content type='html'>I've been looking into &lt;a href="http://www.microsoft.com/visualstudio/en-us/lightswitch"&gt;LightSwitch&lt;/a&gt; from Microsoft.&amp;nbsp; Its Microsoft's newest foray into what I like to call Hyper-RAD.&amp;nbsp; It actually looks kind of interesting and brings a lot of tools originally developed as part of Microsoft's .NET tools arsenal.&amp;nbsp; I first heard of it from a &lt;a href="http://www.dotnetrocks.com/"&gt;.NET Rocks!&lt;/a&gt; pod cast.&amp;nbsp; See show #583 &lt;a href="http://www.dotnetrocks.com/default.aspx?showNum=583"&gt;Jay Schmelzer unveils Microsoft LightSwitch&lt;/a&gt;.&amp;nbsp; Take a listen.&lt;br /&gt;&lt;br /&gt;I'll be trying it out over the next few weeks.&amp;nbsp; Lets all hope its not another Access!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6332768823423107845-8586349639585759450?l=frontlinesoftwaredev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frontlinesoftwaredev.blogspot.com/feeds/8586349639585759450/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://frontlinesoftwaredev.blogspot.com/2010/09/microsoft-light-switch-new-lob.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6332768823423107845/posts/default/8586349639585759450'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6332768823423107845/posts/default/8586349639585759450'/><link rel='alternate' type='text/html' href='http://frontlinesoftwaredev.blogspot.com/2010/09/microsoft-light-switch-new-lob.html' title='Microsoft Light Switch - a New LOB Development Tool'/><author><name>Greg.Wernke</name><uri>http://www.blogger.com/profile/03457582135459633625</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6332768823423107845.post-5365750901875390582</id><published>2010-09-24T22:39:00.010-05:00</published><updated>2010-11-10T21:08:54.690-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reflection'/><category scheme='http://www.blogger.com/atom/ns#' term='generics'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><title type='text'>Fun With Reflection (and Generics).</title><content type='html'>&lt;div style="margin-bottom: 0in;"&gt;On a recent project I had to hand write a lot of CRUD and I used SQL Views and Stored Procedures to isolate the MS-SQL database I was using.&amp;nbsp;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;I found myself coding up a bunch of methods that made calls to those stored procedures and then populated objects in a generic List&amp;lt;&amp;gt; from the returned data set.  After my Nth method I figured there had to be a better way, so I came up with the following:&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;static&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt;List&lt;span style="color: black;"&gt;&lt;t&gt;&lt;/t&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;lt;T&amp;gt; SprocToList&amp;lt;T&amp;gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt;String&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; SprocName, &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt;String&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; Connection)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp; List&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;t&gt; data = &lt;/t&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;new&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt;List&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;t&gt;();&lt;/t&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp; Type&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; c = &lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;typeof&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;(T);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp; T instanceOf;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp; try&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  &lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;using&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; (SqlConnection conn = &lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;new&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; SqlConnection(Connection))&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;try&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    SqlCommand cmd = conn.CreateCommand();&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmd.CommandText = SprocName;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;cmd.CommandType = CommandType.StoredProcedure;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;conn.Open();&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;SqlDataReader reader = cmd.ExecuteReader();&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;while&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; (reader.Read())&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;instanceOf = (T)&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt;Activator&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;.CreateInstance(&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt;Type&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;.GetType(c.AssemblyQualifiedName));&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;foreach&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;var&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; propInfo &lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;in&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; c.GetProperties())&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;     {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;try&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; (reader[propInfo.Name] != &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt;DBNull&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;.Value)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;try&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;propInfo.SetValue(instanceOf,&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; reader[propInfo.Name], &lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;null&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;catch&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt;Exception&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; oEx)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt;Console&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;.WriteLine(oEx.Message);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt;Console&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;.WriteLine("Value is null!!");&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;catch&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt;Exception&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; oEx)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt;Console&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;.WriteLine(oEx.Message);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;data.Add(instanceOf);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;catch&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt;Exception&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; oEx)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt;Console&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;.WriteLine(oEx.Message);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;return&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;null&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;catch&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt;Exception&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; oEx)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt;Console&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;.WriteLine(oEx.Message);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;return&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;null&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;return&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; data;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;This Generic method takes a stored procedure name and a SQL connection and returns a List&amp;lt;&amp;gt; of type T.  It traverses the returned data set by getting the property names in the Object of type T and using those property names as the data set's field names.  The Object of type T is instanced using reflection (see  &lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt;Activator&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;.CreateInstance&lt;/span&gt;&lt;/span&gt; statement).&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;One caveat: Object of type T must have properties of the exact same name as the fields returned by the stored procedure.&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;This can be used for &lt;span style="color: #00b8ff;"&gt;ObservableCollections&lt;/span&gt; as well.  I hope this helps someone, although if you're considering using something like this you might consider Entity Framework 4.0 instead.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6332768823423107845-5365750901875390582?l=frontlinesoftwaredev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frontlinesoftwaredev.blogspot.com/feeds/5365750901875390582/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://frontlinesoftwaredev.blogspot.com/2010/09/fun-with-reflection-and-generics.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6332768823423107845/posts/default/5365750901875390582'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6332768823423107845/posts/default/5365750901875390582'/><link rel='alternate' type='text/html' href='http://frontlinesoftwaredev.blogspot.com/2010/09/fun-with-reflection-and-generics.html' title='Fun With Reflection (and Generics).'/><author><name>Greg.Wernke</name><uri>http://www.blogger.com/profile/03457582135459633625</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6332768823423107845.post-8403378985345262996</id><published>2010-09-12T17:48:00.004-05:00</published><updated>2010-12-18T23:26:42.733-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.net framework 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='delegated events'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><title type='text'>Event Delegates – For The Object Challenged.</title><content type='html'>&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;I remember when I first read about delegated events in .net.  My first thought was “cool”.  My second thought was “How does that work”?&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;It sounds neat.  You have an event that will fire from a class when that class does something that some other class in your system may want to know about.  Easy, right?&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;Well I'm not afraid to admit it wasn't easy for me.  I was trained procedurally, objects were just abstract concepts when I was in collage.  In procedural code your entire code base knows about public subroutines and functions contained with in it.  My first thought was how does another class know that the delegated event fires?  For that matter, how does one fire the event in the first place?  Because of this procedural point of view, I thought that delegated events were just magically “out there” and once fired the event was there for anyone to use.  &lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;Well to understand delegates then consider the following rules:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;ol style="text-align: justify;"&gt;&lt;li&gt;&lt;div style="margin-bottom: 0in;"&gt;In order for a class to “listen”  (subscribe) to a delegated event the subscribing class needs to know  about the class that fires the delegate.  This can be done by  instantiating the class that fires the delegate directly, or by  being passed to the listening class though a constructor for example.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div style="margin-bottom: 0in;"&gt;Delegated events must be “fired”  in code.  This for me was, for some reason, the hardest thing to  understand  at first, I thought that you just set up the event it it  fired magically.&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;Consider the following screen snap from WPF user control I did for a project.  It is a search term entry control.  It does some input validation and then sends the search criteria entered to a class that listens to a few events the control fires.  In the project this is for I have a number of grid based forms that communicate a lot of data in each grid.  Because of the amount of data it became a requirement to allow filtering.&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_tmAntTkgO6w/TI1Sr0k0eSI/AAAAAAAAAAM/naP6NA1a7gs/s1600/searchBar1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_tmAntTkgO6w/TI1Sr0k0eSI/AAAAAAAAAAM/naP6NA1a7gs/s320/searchBar1.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;When the user presses either the Search or Reset buttons, the control does some input verification and then fires a “search” event that another class can subscribe to.  The subscribing class then gets notice of the event and a set of arguments passed that it can then decide to act on or not.  Now let me state here that I could have done this by putting a unique Search Bar and code on each form that required this ability, but I had 10 forms to provide this functionally for and the "copy/paste" approach (a typical one for procedural developers) would mean a LOT of copy and past code.  NOT cool.&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;Lets look at the code behind that sets up the events:&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;event&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt;EventHandler&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt;SearchArgs&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;gt; SearchPressed;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;        &lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;event&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt;EventHandler&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt;SearchArgs&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;gt; SearchReset;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;        &lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;virtual&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; OnSearchPressed(&lt;span style="color: #2b91af;"&gt;ISearchItem&lt;/span&gt; SearchItem)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;        &lt;span style="font-size: x-small;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; (SearchPressed != &lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;null&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;                &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt;SearchArgs&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; args = &lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;new&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt;SearchArgs&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;args.SearchItem = GetSearchItem();&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;SearchPressed(&lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;this&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;, args);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;        &lt;span style="font-size: x-small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;        &lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;protected&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;virtual&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;void&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; OnSearchReset()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;        &lt;span style="font-size: x-small;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;            &lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; (SearchReset != &lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;null&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;                &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt;SearchArgs&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; args = &lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;new&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt;SearchArgs&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;SearchReset(&lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;this&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;, args);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;        &lt;span style="font-size: x-small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;The first two lines set up the event delegate declarations.  Read line one as “I want a public event called SearchPressed that will pass along event arguments named SearchArgs”.  SearchArgs inherits from System.EventsArgs – the base class for all event arguments.&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;This basic code sets up the declares for the delegated event.  Note that delegates are MUCH easier in the 3.0 framework because of generics.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;Ok – how do we fire the event?  Consider the following code:&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;        &lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; SearchBox_KeyDown(&lt;span style="color: blue;"&gt;object&lt;/span&gt; sender, &lt;span style="color: #2b91af;"&gt;KeyEventArgs&lt;/span&gt; e)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;        &lt;span style="font-size: x-small;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;            &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; (e.Key == &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt;Key&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;.Enter)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;OnSearchPressed(GetSearchItem());&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;        &lt;span style="font-size: x-small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;        &lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;private&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;void&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; Search_Click(&lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;object&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; sender, &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt;RoutedEventArgs&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; e)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;        &lt;span style="font-size: x-small;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;OnSearchPressed(GetSearchItem());&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;        &lt;span style="font-size: x-small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;The first event method handles an KeyDown event for the enter key on the text box where you enter your search criteria.  The second event method handles the Search button click event.  When each is activated then the OnSearchPressed() method is called.  The act of call this event actually fires the event.&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;OK – we've fired the event, but now we have to have something listen to it.  Who listens?   &lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;Remember this is a user control that takes input by a user and fires an event when the user presses the search button, or hits the enter key.  To catch this event we need something to “listen to” or subscribe to the event.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;This particular control is designed to be used on a containing UI control.  To use the searchBar control I've will create a WPF form and place the search control on the form under the name &lt;b&gt;searchBar1&lt;/b&gt;.  See the code behind below:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;partial&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;class&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt;MainWindow&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; : &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt;Window&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;    &lt;span style="font-size: x-small;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;        &lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; MainWindow()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;InitializeComponent();&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;            &lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;this&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;.searchBar1.SearchPressed +=&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;            &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;            &lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;new&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt;EventHandler&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;searchcontrol.&gt;&lt;/searchcontrol.&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt;SearchArgs&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;gt;(searchBar1_SearchPressed);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;            &lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;this&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;.searchBar1.SearchReset +=&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;            &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;            &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;new&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt;EventHandler&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;searchcontrol.&gt;&lt;/searchcontrol.&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt;SearchArgs&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;gt;(searchBar1_SearchReset);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;        &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;void&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; searchBar1_SearchPressed(&lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;object&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; sender, SearchControl.&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt;SearchArgs&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; e)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;            &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; (e.SearchItem != &lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;null&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;                &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt;MessageBox&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;.Show(&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;&lt;span style="font-size: x-small;"&gt;"Search Event fired on containing form from&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;            &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;            &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;&lt;span style="font-size: x-small;"&gt;Search User Control"&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;&lt;span style="font-size: x-small;"&gt;"Delegate Example"&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt;MessageBoxButton&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;.OK);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;                &lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;this&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;.textBox1.Text = e.SearchItem.SearchTerm;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;        &lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;void&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; searchBar1_SearchReset(&lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;object&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; sender, SearchControl.&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt;SearchArgs&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; e)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;            &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt;MessageBox&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;.Show(&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;&lt;span style="font-size: x-small;"&gt;"Reset Event fired on containing form from&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;            &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;            &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;&lt;span style="font-size: x-small;"&gt;Search User Control"&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;            &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;&lt;span style="font-size: x-small;"&gt;"Delegate Example"&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt;MessageBoxButton&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;.OK);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;            &lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;this&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;.textBox1.Text = &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;&lt;span style="font-size: x-small;"&gt;""&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;    &lt;span style="font-size: x-small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;The above is the code behind of the WPF form.  Now note the MainWindow constructor:&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;        &lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; MainWindow()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;        &lt;span style="font-size: x-small;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;InitializeComponent();&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;            &lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;this&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;.searchBar1.SearchPressed +=&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;            &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;new&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt; EventHandler&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;searchcontrol.&gt;&lt;/searchcontrol.&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt;SearchArgs&lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;gt;(searchBar1_SearchPressed);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;this&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;.searchBar1.SearchReset +=&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;            &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;new&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt;EventHandler&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;searchcontrol.&gt;&lt;/searchcontrol.&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt;SearchArgs&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;(searchBar1_SearchReset&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;        &lt;span style="font-size: x-small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;void&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; searchBar1_SearchPressed(&lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;object&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; sender, SearchControl.&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt;SearchArgs&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; e)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;        &lt;span style="font-size: x-small;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;            &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;            &lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; (e.SearchItem != &lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;null&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;            &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;                &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;            &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;            &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt;MessageBox&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;.Show(&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;&lt;span style="font-size: x-small;"&gt;"Search Event fired on containing form from Search&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;            &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;            &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;            &lt;/span&gt;&lt;span style="color: #a31515;"&gt;&lt;span style="font-size: x-small;"&gt;User Control"&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;            &lt;/span&gt;&lt;span style="color: black;"&gt;            &lt;/span&gt;&lt;span style="color: #a31515;"&gt;&lt;span style="font-size: x-small;"&gt;"Delegate Example"&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt;MessageBoxButton&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;.OK);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;                &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;            &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;            &lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;this&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;.textBox1.Text = e.SearchItem.SearchTerm;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;            &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;        &lt;span style="font-size: x-small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;        &lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;void&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; searchBar1_SearchReset(&lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;object&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; sender, SearchControl.&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt;SearchArgs&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt; e)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;        &lt;span style="font-size: x-small;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;            &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;            &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt;MessageBox&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;.Show(&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;&lt;span style="font-size: x-small;"&gt;"Reset Event fired on containing form from Search User Control"&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;, &lt;/span&gt;&lt;/span&gt; &lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;            &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;            &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;            &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;            &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;            &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;            &lt;/span&gt;&lt;span style="color: #a31515;"&gt;&lt;span style="font-size: x-small;"&gt;"Delegate Example"&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: x-small;"&gt;MessageBoxButton&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;.OK);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;            &lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &lt;/span&gt;&lt;span style="color: black;"&gt;            &lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;this&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;.textBox1.Text = &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;&lt;span style="font-size: x-small;"&gt;""&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: x-small;"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;span style="color: black;"&gt;        &lt;span style="font-size: x-small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;We initialize the form components on the first line.  The second and third lines actually sets up the subscription to the events we want to listen to.  Read the first line as “for the SearchPressed event I will instance a new event handler with the event arguments SearchControl.SearchArgs.  This event will be handled by a method called serachBar1_SearchPressed method”.  The second line does the same for the SearchReset event.  &lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;So, how does this work?  See below:&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_tmAntTkgO6w/TI1UIis6ZrI/AAAAAAAAAAU/5HrTkVNVdYg/s1600/searchBar2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_tmAntTkgO6w/TI1UIis6ZrI/AAAAAAAAAAU/5HrTkVNVdYg/s320/searchBar2.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;This screen shot shows the results of entering the text &lt;b&gt;“This is a test in the search box”&lt;/b&gt; and pressing the Search button.  The event fires ON the serachBar control and sends the event arguments SearchControl.SearchArgs to the subscriber, in this case the WPF form that contains the user control.  The next example shows the results of pressing the Reset button:&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_tmAntTkgO6w/TI1USakVVnI/AAAAAAAAAAc/8YDfkBtIyH4/s1600/searchBar3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_tmAntTkgO6w/TI1USakVVnI/AAAAAAAAAAc/8YDfkBtIyH4/s320/searchBar3.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;I hope this example shows you the basics of delegated events.  Keep in mind that although this example uses UI components, you can do delegates for any sort of interaction you want.&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;I've included a zip of the example project &lt;a href="https://docs.google.com/leaf?id=0BzfL3GInKyoDYjg5MzU0YmEtZjVkNS00N2I0LTg3ZmItYTViNGIxYjI1ODRk&amp;amp;hl=en&amp;amp;authkey=CKaw-yw"&gt;here&lt;/a&gt;.&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;My thanks to Chris Dillon for conversations about this post.&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6332768823423107845-8403378985345262996?l=frontlinesoftwaredev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frontlinesoftwaredev.blogspot.com/feeds/8403378985345262996/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://frontlinesoftwaredev.blogspot.com/2010/09/event-delegates-for-object-challenged.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6332768823423107845/posts/default/8403378985345262996'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6332768823423107845/posts/default/8403378985345262996'/><link rel='alternate' type='text/html' href='http://frontlinesoftwaredev.blogspot.com/2010/09/event-delegates-for-object-challenged.html' title='Event Delegates – For The Object Challenged.'/><author><name>Greg.Wernke</name><uri>http://www.blogger.com/profile/03457582135459633625</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_tmAntTkgO6w/TI1Sr0k0eSI/AAAAAAAAAAM/naP6NA1a7gs/s72-c/searchBar1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6332768823423107845.post-1803734595917017020</id><published>2010-07-25T17:44:00.000-05:00</published><updated>2010-07-25T17:44:38.015-05:00</updated><title type='text'>I'm Back!!</title><content type='html'>After a bit of a break (six months!), I'm back at it.&amp;nbsp; Stay tuned for some posts on basic .NET OOP &amp;amp; applied patterns.&lt;br /&gt;&lt;br /&gt;More Later...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6332768823423107845-1803734595917017020?l=frontlinesoftwaredev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frontlinesoftwaredev.blogspot.com/feeds/1803734595917017020/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://frontlinesoftwaredev.blogspot.com/2010/07/im-back.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6332768823423107845/posts/default/1803734595917017020'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6332768823423107845/posts/default/1803734595917017020'/><link rel='alternate' type='text/html' href='http://frontlinesoftwaredev.blogspot.com/2010/07/im-back.html' title='I&apos;m Back!!'/><author><name>Greg.Wernke</name><uri>http://www.blogger.com/profile/03457582135459633625</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6332768823423107845.post-7669559467813360328</id><published>2010-03-08T20:39:00.000-06:00</published><updated>2010-03-08T20:39:28.007-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CTEs'/><category scheme='http://www.blogger.com/atom/ns#' term='T-SQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Query Performance'/><title type='text'>More Fun With SQL – Sub-Selects &amp; Using Temp Tables to Make Sub-Selects Faster</title><content type='html'>&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;In an earlier post I mentioned that I do a lot of SQL work at my present job.  In the course of this work I often have to form complex queries using sub selects in joins.  Subs-selects have lots of uses but they come with their own issues.&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;Consider the following:&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;&lt;b&gt;SELECT&lt;/b&gt; c.custaccount&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;, c.custaddress&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;, o.ordid&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;&lt;b&gt;FROM&lt;/b&gt; customers c&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;&lt;b&gt;JOIN&lt;/b&gt; (&lt;b&gt;SELECT&lt;/b&gt;  &lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;&lt;b&gt;MAX&lt;/b&gt;(o.orderid) ordid, o.custaccount&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;&lt;b&gt;FROM&lt;/b&gt; Orders o&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;&lt;b&gt;WHERE&lt;/b&gt; o.orderdate &lt;b&gt;BETWEEN&lt;/b&gt; &lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;'01-01-2010' &lt;b&gt;AND&lt;/b&gt; '03-01-2010'&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;&lt;b&gt;GROUP BY&lt;/b&gt; o.custaccount)  lastorder &lt;b&gt;ON&lt;/b&gt; lastorder.custaccount = c. custaccount&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;This is a pretty standard query, basically we're pulling all customers who had an order between Jan-1-2010 and March-1-2010 and further we're getting the orderid of the customers last order in that time frame.  This is a useful query, but isn't the best performing.  In cases where the number of records in either table are fairly small there's no real reason to re-write this query.  &lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;BUT if the customer table has millions of records with lots of orders per customer this query will take considerable time to run.&amp;nbsp; what can be done in this case?&amp;nbsp; Keep in mind that in queries with sub-selects each select through the customer table (in this example) will require the sub-select query to select over the entire order table grouping by the custaccount.  This means the query will re-query the orders table over and over again.  How can this be done better?&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;Consider this:&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;b&gt;SELECT&lt;/b&gt;  &lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;b&gt;MAX&lt;/b&gt;(o.orderid) ordid, o.custaccount&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;b&gt;INTO&lt;/b&gt; #t1&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;b&gt;FROM&lt;/b&gt; Orders o&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;b&gt;WHERE&lt;/b&gt; o.orderdate &lt;b&gt;BETWEEN&lt;/b&gt; &lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;'01-01-2010' &lt;b&gt;AND&lt;/b&gt; '03-01-2010'&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;b&gt;GROUP BY &lt;/b&gt;o.custaccount&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;b&gt;SELECT&lt;/b&gt; c.custaccount&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;, c.custaddress&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;, o.ordid&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;b&gt;FROM&lt;/b&gt; customers c&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;b&gt;JOIN&lt;/b&gt; #t1 t on t.custaccount = c. custaccount&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;b&gt;DROP TABLE&lt;/b&gt; #t1&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;This query is much faster by virtue of the fact that we first pull the MAX order id, grouping by the account between '01-01-2010' &lt;span style="font-weight: normal;"&gt;AND&lt;/span&gt; '03-01-2010' into a temporary table, THEN we perform the select.  This SQL is much faster because we are not constantly re-querying the same table over and over again.  We can clean this up even more by using a CTE.  Use of the CTE removes the need to drop the temp table.&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;b&gt;WITH&lt;/b&gt; maxorder (OrderId, CustomerAccount)&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;(&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;b&gt;SELECT&lt;/b&gt;  &lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;b&gt;MAX&lt;/b&gt;(o.orderid) ordid, o.custaccount&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;b&gt;INTO&lt;/b&gt; #t1&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;b&gt;FROM&lt;/b&gt; Orders o&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;b&gt;WHERE&lt;/b&gt; o.orderdate &lt;b&gt;BETWEEN&lt;/b&gt; &lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;'01-01-2010' &lt;b&gt;AND&lt;/b&gt; '03-01-2010'&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;b&gt;GROUP BY &lt;/b&gt;o.custaccount&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;)&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;b&gt;SELECT&lt;/b&gt; c.custaccount&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;, c.custaddress&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;, o. OrderId&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;b&gt;FROM&lt;/b&gt; customers c&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;b&gt;JOIN&lt;/b&gt; maxorder o on o. CustomerAccount = c.  CustomerAccount&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6332768823423107845-7669559467813360328?l=frontlinesoftwaredev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frontlinesoftwaredev.blogspot.com/feeds/7669559467813360328/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://frontlinesoftwaredev.blogspot.com/2010/03/more-fun-with-sql-sub-selects-using.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6332768823423107845/posts/default/7669559467813360328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6332768823423107845/posts/default/7669559467813360328'/><link rel='alternate' type='text/html' href='http://frontlinesoftwaredev.blogspot.com/2010/03/more-fun-with-sql-sub-selects-using.html' title='More Fun With SQL – Sub-Selects &amp; Using Temp Tables to Make Sub-Selects Faster'/><author><name>Greg.Wernke</name><uri>http://www.blogger.com/profile/03457582135459633625</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6332768823423107845.post-2737170041756593439</id><published>2010-03-07T16:51:00.003-06:00</published><updated>2010-03-08T08:18:21.305-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='IQueryable'/><category scheme='http://www.blogger.com/atom/ns#' term='Repository Pattern'/><category scheme='http://www.blogger.com/atom/ns#' term='LINQ'/><title type='text'>Great Article using IQueryable to Create a Custom Provider Similar to LINQ to SQL For Other DataBase types.</title><content type='html'>&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;I found this while doing some LINQ to XML work recently for Vanderbilt in preparation for an article on some work I did there.&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;&lt;a href="http://msdn.microsoft.com/en-us/vcsharp/ee672195.aspx"&gt;http://msdn.microsoft.com/en-us/vcsharp/ee672195.aspx&lt;/a&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;Its a great article about using the IQueryable interface to do a custom provider similar to LINQ-to-SQL for CRUD operations for other databases.&amp;nbsp;  Check it out, its a good read and comes with examples.&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;This approach would be useful for crafting a generic repository pattern for your projects.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6332768823423107845-2737170041756593439?l=frontlinesoftwaredev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frontlinesoftwaredev.blogspot.com/feeds/2737170041756593439/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://frontlinesoftwaredev.blogspot.com/2010/03/great-article-using-iqueryable-to.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6332768823423107845/posts/default/2737170041756593439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6332768823423107845/posts/default/2737170041756593439'/><link rel='alternate' type='text/html' href='http://frontlinesoftwaredev.blogspot.com/2010/03/great-article-using-iqueryable-to.html' title='Great Article using IQueryable to Create a Custom Provider Similar to LINQ to SQL For Other DataBase types.'/><author><name>Greg.Wernke</name><uri>http://www.blogger.com/profile/03457582135459633625</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6332768823423107845.post-7743698608798613604</id><published>2010-03-07T00:58:00.000-06:00</published><updated>2010-03-07T00:58:30.739-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Utilities'/><category scheme='http://www.blogger.com/atom/ns#' term='PDF Viewers'/><title type='text'>Slightly Off Topic - Foxit Reader: A Great PDF Viewer</title><content type='html'>Check out Foxit Reader.&amp;nbsp; I have just updated my system to Windows 7 Ultimate and have been re-installing updates to my favorite utilities.&amp;nbsp; I downloaded Adobe PDF reader, but while looking for my other favorites, I found a reference to Foxit.&amp;nbsp; It runs rings around Adobe speed wise, is much slower and is free to boot.&lt;br /&gt;&lt;br /&gt;Check it out here: &lt;a href="http://www.foxitsoftware.com/pdf/reader/"&gt;http://www.foxitsoftware.com/pdf/reader/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6332768823423107845-7743698608798613604?l=frontlinesoftwaredev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frontlinesoftwaredev.blogspot.com/feeds/7743698608798613604/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://frontlinesoftwaredev.blogspot.com/2010/03/slightly-off-topic-foxit-reader-great.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6332768823423107845/posts/default/7743698608798613604'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6332768823423107845/posts/default/7743698608798613604'/><link rel='alternate' type='text/html' href='http://frontlinesoftwaredev.blogspot.com/2010/03/slightly-off-topic-foxit-reader-great.html' title='Slightly Off Topic - Foxit Reader: A Great PDF Viewer'/><author><name>Greg.Wernke</name><uri>http://www.blogger.com/profile/03457582135459633625</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6332768823423107845.post-1733076318256444699</id><published>2010-02-24T19:40:00.002-06:00</published><updated>2010-03-09T09:49:07.062-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='T-SQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Query Performance'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Three T-SQL Tricks Courtesy of Some Friends</title><content type='html'>&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;If you do any business development at all odds are you have to create, read, update and delete data (CRUD) out of a database of some type.   &lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;At my present job we write a lot of T-SQL.  In my two years there I've been lucky enough to learn some nice tricks from some really talented SQL coders who have graciously shared their SQL insights with me.  In this post I'd like to cover three simple tricks to keep in mind when writing SQL queries.&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;I) Queries with both inner and outer joins&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;i&gt;Consider:&lt;/i&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;b&gt;SELECT * FROM&lt;/b&gt; tblCustomer c&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;b&gt;LEFT OUTER JOIN&lt;/b&gt; tblPhones p &lt;b&gt;ON&lt;/b&gt; p.CustomerID = a.CustomerID  &lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;b&gt;INNER JOIN&lt;/b&gt; tblAddress a &lt;b&gt;ON&lt;/b&gt; c.CustomerID = a.CustomerID  &lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;b&gt;WHERE&lt;/b&gt; p.PhoneNumber &lt;span style="font-weight: normal;"&gt;IS NULL AND&lt;/span&gt; a.State = 'OH'&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;This is a pretty standard query when you want to find all (in this case) customers in Ohio without phone numbers.  This query will work, but its not very well written.  Consider the order of the joins - in this query we have two joins - an outer and an inner one with the outer join first in the sequence.  What will happen is the following.&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;So say tblCustomer has 1000 customers, tblPhones has 2000 phone records, we end up pulling a lot of data up front before we start limiting the size of the dataset.  Its not until we inner join to tblAddress,  with 300 addresses that we start trimming down the data.  The criteria of the where clause further limits the dataset to the 50 addresses in Ohio and then to the 10 customers in Ohio don't have a phone.&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;i&gt;Consider this version:&lt;/i&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;b&gt;SELECT&lt;/b&gt; * &lt;b&gt;FROM&lt;/b&gt; tblCustomer c&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;b&gt;INNER JOIN&lt;/b&gt; tblAddress a &lt;b&gt;ON&lt;/b&gt; c.CustomerID = a.CustomerID  &lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;b&gt;LEFT OUTER JOIN&lt;/b&gt; tblPhones p &lt;b&gt;ON&lt;/b&gt; p.CustomerID = a.CustomerID  &lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;b&gt;WHERE&lt;/b&gt; p.PhoneNumber &lt;span style="font-weight: normal;"&gt;IS NULL AND&lt;/span&gt; a.State = 'OH'&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;So now tblCustomer still has 1000 customers, but the inner join with tblAddress now immediately restricts the data set to 300, pulling a lot less data up front.&amp;nbsp; The outer join still pulls 2000 phones and the where clause will then further restrict the data set to 10.  As you can see this query is much better because we pull less data up front.  By moving all inner joins above any outer joins will greatly decrease query time and make the query much more efficient.&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;II) Move Your Criteria Out of the WHERE clause.&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;i&gt;Consider again:&lt;/i&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;b&gt;SELECT&lt;/b&gt; * &lt;b&gt;FROM&lt;/b&gt; tblCustomer c&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;b&gt;INNER JOIN&lt;/b&gt; tblAddress a &lt;b&gt;ON&lt;/b&gt; c.CustomerID = a.CustomerID  &lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;b&gt;LEFT OUTER JOIN&lt;/b&gt; tblPhones p &lt;b&gt;ON&lt;/b&gt; p.CustomerID = a.CustomerID  &lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;b&gt;WHERE&lt;/b&gt; p.PhoneNumber &lt;span style="font-weight: normal;"&gt;IS NULL AND&lt;/span&gt; a.State = 'OH'&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;This is better than where we started from, but we can do better.  Note that in the where condition we have the following:  AND a.State = 'OH'.  This criteria targets the tblAddress table, but does it have to be in the WHERE statement?&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;i&gt;Consider now:&lt;/i&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;b&gt;SELECT&lt;/b&gt; * &lt;b&gt;FROM&lt;/b&gt; tblCustomer c&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;b&gt;INNER JOIN &lt;/b&gt;tblAddress a &lt;b&gt;ON&lt;/b&gt; c.CustomerID = a.CustomerID AND a.State = 'OH'&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;b&gt;LEFT OUTER JOIN&lt;/b&gt; tblPhones p &lt;b&gt;ON&lt;/b&gt; p.CustomerID = a.CustomerID  &lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;b&gt;WHERE&lt;/b&gt; p.PhoneNumber IS NULL&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;By moving the State criteria to the join the following happens.  tblCustomer still has 1000 customers, but now the inner join and the State = 'OH' criteria with tblAddress now restricts the data set to 10 instead of 300.  Again this query is much better because we pull much less data up front.  By moving what criteria you can out of the where clause you will greatly decrease query time.&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;III) Do you really need to SELECT * from those tables?&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;Many developers will write SELECT * on select queries when they really need only a few fields from the tables they are querying.  If you limit SELECTs to just that data you want to retrieve, you can increase your query's performance, particularly when you query tables whit a lot of columns.&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;b&gt;So to recap:&amp;nbsp;&lt;/b&gt;&lt;br /&gt;-Inner Joins before Outer Joins.&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;-Move as much of your queries criteria to the joins as possible.&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;-No SELECT * if you can help it.&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;Simple tricks, but applying them can make a big difference.&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;My thanks to my friends Alan Huffman and John Anderson who have been unstinting with SQL knowledge.&amp;nbsp; Check out Alan's Blog &lt;a href="http://southernbits.com/"&gt;Southern BITS of Technical Goodness&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6332768823423107845-1733076318256444699?l=frontlinesoftwaredev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frontlinesoftwaredev.blogspot.com/feeds/1733076318256444699/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://frontlinesoftwaredev.blogspot.com/2010/02/three-t-sql-tricks-courtesy-of-some.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6332768823423107845/posts/default/1733076318256444699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6332768823423107845/posts/default/1733076318256444699'/><link rel='alternate' type='text/html' href='http://frontlinesoftwaredev.blogspot.com/2010/02/three-t-sql-tricks-courtesy-of-some.html' title='Three T-SQL Tricks Courtesy of Some Friends'/><author><name>Greg.Wernke</name><uri>http://www.blogger.com/profile/03457582135459633625</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6332768823423107845.post-1491856949646462698</id><published>2010-02-24T19:24:00.002-06:00</published><updated>2010-02-24T19:49:52.818-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Mono'/><title type='text'>Mono Develop - a GTK IDE for .NET development</title><content type='html'>&lt;div style="text-align: justify;"&gt;I did a post a couple of days ago on SharpDevelop, an alternitive IDE for c# development on Windows.&amp;nbsp; Alan responded to the post by mentioning Mono Develop, an IDE for .NET Linux development using the GNOME tool kit.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Sounded like a greate idea so here's a link to the &lt;a href="http://monodevelop.com/"&gt;Mono Develop&lt;/a&gt; site.&amp;nbsp; I was able to use Mono Develop version 1.0 while at Vanderbilt.&amp;nbsp; It was a bit twitchy, but work well for a version 1.0 release.&amp;nbsp; I hear that the 2.2 version works well and is usable on Linux, Mac and Windows.&amp;nbsp; I plan to try a project using Mono Develop.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6332768823423107845-1491856949646462698?l=frontlinesoftwaredev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frontlinesoftwaredev.blogspot.com/feeds/1491856949646462698/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://frontlinesoftwaredev.blogspot.com/2010/02/mono-develop-gtk-ide-for-net.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6332768823423107845/posts/default/1491856949646462698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6332768823423107845/posts/default/1491856949646462698'/><link rel='alternate' type='text/html' href='http://frontlinesoftwaredev.blogspot.com/2010/02/mono-develop-gtk-ide-for-net.html' title='Mono Develop - a GTK IDE for .NET development'/><author><name>Greg.Wernke</name><uri>http://www.blogger.com/profile/03457582135459633625</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6332768823423107845.post-2982150221155952995</id><published>2010-02-22T21:20:00.001-06:00</published><updated>2010-02-24T19:50:11.478-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development Patterns'/><title type='text'>Design Patterns for the Pattern Challenged: The Repository Pattern</title><content type='html'>&lt;div style="text-align: justify;"&gt;Martin Fowler writes: &lt;/div&gt;&lt;div style="text-align: justify;"&gt;"&lt;i&gt;A Repository mediates between the domain and data mapping layers, acting like an in-memory domain object collection. Client objects construct query specifications declaratively and submit them to Repository for satisfaction. Objects can be added to and removed from the Repository, as they can from a simple collection of objects, and the mapping code encapsulated by the Repository will carry out the appropriate operations behind the scenes. Conceptually, a Repository encapsulates the set of objects persisted in a data store and the operations performed over them, providing a more object-oriented view of the persistence layer. Repository also supports the objective of achieving a clean separation and one-way dependency between the domain and data mapping layers.&lt;/i&gt;"&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;&lt;br /&gt;Of all the &lt;a href="http://www.developer.com/design/article.php/3325211/What-Are-Design-Patterns.htm"&gt;design patterns&lt;/a&gt; I have tried to use at work I like the repository pattern the best, perhaps because I had the chance to work on an application that used the repository pattern for a recent work project.    &lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;The project I was working on was an typical of those may of us face on a day to day basis.  A former colleague had done some work on a WPF-based scripting engine prototype that was to be used in a phone survey project that project tanked, but it was thought that the scripting prototype would be useful in a big compliance project I was leading.  The original developer was no longer available, so it was up to me to re-factor the code for the new project.&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;I faced of number interesting challenges on this project.  One was that I had to wrap the engine in a COM+ wrapper for use by an older VB6 type project.  Ugly (I hate COM), but pretty straight forward.   &lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;Another issue was that the engine was done using WPF and my WPF experience is (was) minimal at best.  I had hoped that I could just use what had already been done, but while re-factoring I found out that the WPF part of the prototype was not as complete as I had hoped, so I had an interesting hack and slash session with the WPF code, changing it to be more robust and functional.  This was an interesting journey in and of itself that I'll write about later.  &lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;The next issue I encountered (and the one this post is about) is that the original project's CRUD stored script responses in a snow-flake scheme SQL database that at the time was thought best for the survey project the engine was originally designed for.  I found that the original scheme was over-kill for what I needed, so I designed a straight three table relational scheme to hold the script responses that I thought much handier for what I needed for this project.  &lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;Fortunately for me the original developer on the project had the foresight to use a repository pattern for the project (he used other patterns as well, but more on that later), implemented using interfaces.  Its use made it very easy for me to replace the original CRUD class, with one of my own.  All I had to do was write my class, implementing the existing interfaces and about 5 minutes later I was done.  In my implementation I used LINQ to SQL, someone else could come in behind me and use Entity Framework &amp;amp; SQL, another could use ADO.NET or someone could write a class that implements an Oracle back end.  &lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in; text-align: justify;"&gt;This was a great real-world example of a bunch of things that we all hear about, but sometimes don't appreciate until we see it for real.  For instance the use of a repository pattern made it much easier for me to replace the snow flake scheme with a better one.  The big lesson I took out of this is that the use of design patterns allows developers to develop in a much more disciplined and thus more maintainable way.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6332768823423107845-2982150221155952995?l=frontlinesoftwaredev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frontlinesoftwaredev.blogspot.com/feeds/2982150221155952995/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://frontlinesoftwaredev.blogspot.com/2010/02/design-patterns-for-pattern-challenged.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6332768823423107845/posts/default/2982150221155952995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6332768823423107845/posts/default/2982150221155952995'/><link rel='alternate' type='text/html' href='http://frontlinesoftwaredev.blogspot.com/2010/02/design-patterns-for-pattern-challenged.html' title='Design Patterns for the Pattern Challenged: The Repository Pattern'/><author><name>Greg.Wernke</name><uri>http://www.blogger.com/profile/03457582135459633625</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6332768823423107845.post-2026704314836597397</id><published>2010-02-21T19:51:00.003-06:00</published><updated>2010-02-24T19:50:23.286-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Mono'/><title type='text'>Sharp Develop .NET IDE</title><content type='html'>&lt;div style="text-align: justify;"&gt;If you've been looking for an alternative IDE for .NET development try &lt;a href="http://www.icsharpcode.net/OpenSource/SD/"&gt;Sharp Develop&lt;/a&gt;.&amp;nbsp;  I used it at Vanderbilt on a few projects back when it was version 2.2 for the 2.0 version of the framework.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Now version 3.2 is out for frameworks 2.0, 3.0 and 3.5 and support a whole raft of options including C# Code Completion, Windows Forms Designer, WPF and F#.&amp;nbsp; Check out the &lt;a href="http://www.icsharpcode.net/OpenSource/SD/Features.aspx"&gt;Sharp Develop's Info page&lt;/a&gt;.&amp;nbsp; I'll be attempting a personal WFP project with Sharp Develop and will post more on using Sharp Develop later.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6332768823423107845-2026704314836597397?l=frontlinesoftwaredev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frontlinesoftwaredev.blogspot.com/feeds/2026704314836597397/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://frontlinesoftwaredev.blogspot.com/2010/02/sharp-develop-net-ide.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6332768823423107845/posts/default/2026704314836597397'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6332768823423107845/posts/default/2026704314836597397'/><link rel='alternate' type='text/html' href='http://frontlinesoftwaredev.blogspot.com/2010/02/sharp-develop-net-ide.html' title='Sharp Develop .NET IDE'/><author><name>Greg.Wernke</name><uri>http://www.blogger.com/profile/03457582135459633625</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry></feed>
