<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<link rel="self" href="/Atom/" />
	<id>http://billmill.org/</id>
	<title>My Name Rhymes</title>
	<subtitle>Bill Mill blogs irregularly</subtitle>
	<updated>2007-12-17T01:13:00Z</updated>
	<author>
		<name>Bill Mill</name>
		<email>bill.mill@gmail.com</email>
		<uri>http://billmill.org/</uri>
	</author>
	<link href="http://billmill.org/" />
	<entry>
		<title>Iterating Over Database Results in C#</title>
		<link href="http://billmill.org/iterate_over_database.html" />	
		<id>http://billmill.org/iterate_over_database.html</id>
		<updated>2007-12-17T01:13:00Z</updated>
		<summary type="html">&lt;p&gt;At my job, we use what is essentially a custom C# ORM. Soon after I arrived, 
we adopted this idiom to pull a DB connection from the pool and run a query:
&lt;div class="highlight"&gt;&lt;pre&gt; &lt;span style="font-weight: bold"&gt;class&lt;/span&gt; &lt;span style="color: #445588; font-weight: bold"&gt;Something&lt;/span&gt;
&lt;span style="font-weight: bold"&gt;{&lt;/span&gt;
    &lt;span style="font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #445588; font-weight: bold"&gt;int&lt;/span&gt; &lt;span style="color: #990000; font-weight: bold"&gt;ourIdiom&lt;/span&gt;(&lt;span style="color: #445588; font-weight: bold"&gt;long&lt;/span&gt; identifier)
    &lt;span style="font-weight: bold"&gt;{&lt;/span&gt;
        &lt;span style="font-weight: bold"&gt;using&lt;/span&gt; (DBConnection db = &lt;span style="font-weight: bold"&gt;new&lt;/span&gt; DBConnection())
        &lt;span style="font-weight: bold"&gt;{&lt;/span&gt;
            &lt;span style="font-weight: bold"&gt;using&lt;/span&gt; (IDataReader rec = db.execQuery(&lt;span style="color: #bb8844"&gt;@&amp;quot;&lt;/span&gt;
&lt;span style="color: #bb8844"&gt;                SELECT some, rows&lt;/span&gt;
&lt;span style="color: #bb8844"&gt;                FROM  Table1 t1, Table2 t2&lt;/span&gt;
&lt;span style="color: #bb8844"&gt;                WHERE t1.t2id = t2.id&lt;/span&gt;
&lt;span style="color: #bb8844"&gt;                AND   t1.id = ?&amp;quot;&lt;/span&gt;,
                identifier))
            &lt;span style="font-weight: bold"&gt;{&lt;/span&gt;
                &lt;span style="font-weight: bold"&gt;while&lt;/span&gt; (rec.Read())
                    doSomething();
                &lt;span style="font-weight: bold"&gt;return&lt;/span&gt; &lt;span style="color: #009999"&gt;1&lt;/span&gt;;
            &lt;span style="font-weight: bold"&gt;}&lt;/span&gt;
        &lt;span style="font-weight: bold"&gt;}&lt;/span&gt;
    &lt;span style="font-weight: bold"&gt;}&lt;/span&gt;
&lt;span style="font-weight: bold"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Which is nice because it disposes of both the connection and the dataReader 
properly on failure, but ugly because it uses a whole bunch of boilerplate.  
Unfortunately, because doSomething() needs to execute inside both 
&lt;code&gt;using&lt;/code&gt; statements, and we weren't using C# 2.0 until a few months 
ago, the only way to avoid the boilerplate would have been to pass in 
delegates.
&lt;p&gt;This would have been just as ugly as keeping the boilerplate in the code, so 
we stuck with the using&lt;sup&gt;2&lt;/sup&gt; idiom.
&lt;p&gt;Since our switchover to 2.0 a few months ago, I've had an idea that I could 
make this idiom more concise and remove some boilerplate that I didn't get a 
chance to try until this week. Using 2.0's iterators, which seem awfully 
familiar from my python work, that can be reduced to:
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span style="font-weight: bold"&gt;class&lt;/span&gt; &lt;span style="color: #445588; font-weight: bold"&gt;Something&lt;/span&gt;
&lt;span style="font-weight: bold"&gt;{&lt;/span&gt;
    &lt;span style="font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #445588; font-weight: bold"&gt;int&lt;/span&gt; &lt;span style="color: #990000; font-weight: bold"&gt;ourIdiom&lt;/span&gt;(&lt;span style="color: #445588; font-weight: bold"&gt;long&lt;/span&gt; identifier)
    &lt;span style="font-weight: bold"&gt;{&lt;/span&gt;
        &lt;span style="font-weight: bold"&gt;foreach&lt;/span&gt; (IDataReader rec &lt;span style="font-weight: bold"&gt;in&lt;/span&gt; &lt;span style="font-weight: bold"&gt;new&lt;/span&gt; SQL().Query(&lt;span style="color: #bb8844"&gt;@&amp;quot;&lt;/span&gt;
&lt;span style="color: #bb8844"&gt;            SELECT some, rows&lt;/span&gt;
&lt;span style="color: #bb8844"&gt;            FROM  Table1 t1, Table2 t2&lt;/span&gt;
&lt;span style="color: #bb8844"&gt;            WHERE t1.t2id = t2.id&lt;/span&gt;
&lt;span style="color: #bb8844"&gt;            AND   t1.id = ?&amp;quot;&lt;/span&gt;,
            identifier))
        &lt;span style="font-weight: bold"&gt;{&lt;/span&gt;
            doSomething();
        &lt;span style="font-weight: bold"&gt;}&lt;/span&gt;
        &lt;span style="font-weight: bold"&gt;return&lt;/span&gt; &lt;span style="color: #009999"&gt;1&lt;/span&gt;;
    &lt;span style="font-weight: bold"&gt;}&lt;/span&gt;
&lt;span style="font-weight: bold"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;With some fairly simple code:
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span style="font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="font-weight: bold"&gt;class&lt;/span&gt; &lt;span style="color: #445588; font-weight: bold"&gt;SQL&lt;/span&gt; : 
    System.Collections.Generic.IEnumerable&amp;lt;IDataReader&amp;gt;
    &lt;span style="font-weight: bold"&gt;{&lt;/span&gt;
        &lt;span style="color: #445588; font-weight: bold"&gt;string&lt;/span&gt; m_sql;
        ArrayList m_sqlparams;

        &lt;span style="font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #990000; font-weight: bold"&gt;SQL&lt;/span&gt;()
        &lt;span style="font-weight: bold"&gt;{&lt;/span&gt;
        &lt;span style="font-weight: bold"&gt;}&lt;/span&gt;

        &lt;span style="font-weight: bold"&gt;public&lt;/span&gt; SQL &lt;span style="color: #990000; font-weight: bold"&gt;query&lt;/span&gt;(&lt;span style="color: #445588; font-weight: bold"&gt;string&lt;/span&gt; sql, &lt;span style="font-weight: bold"&gt;params&lt;/span&gt; &lt;span style="color: #445588; font-weight: bold"&gt;object&lt;/span&gt;[] sqlparams)
        &lt;span style="font-weight: bold"&gt;{&lt;/span&gt;
            m_sql = sql;
            m_sqlparams = &lt;span style="font-weight: bold"&gt;new&lt;/span&gt; ArrayList(sqlparams);
            &lt;span style="font-weight: bold"&gt;return&lt;/span&gt; &lt;span style="font-weight: bold"&gt;this&lt;/span&gt;;
        &lt;span style="font-weight: bold"&gt;}&lt;/span&gt;

        IEnumerator&amp;lt;IDataReader&amp;gt; IEnumerable&amp;lt;IDataReader&amp;gt;.GetEnumerator()
        &lt;span style="font-weight: bold"&gt;{&lt;/span&gt;
            &lt;span style="font-weight: bold"&gt;using&lt;/span&gt; (clsDBConnection db = &lt;span style="font-weight: bold"&gt;new&lt;/span&gt; clsDBConnection(m_dbname))
            &lt;span style="font-weight: bold"&gt;{&lt;/span&gt;
                &lt;span style="font-weight: bold"&gt;using&lt;/span&gt; (IDataReader rec = db.execQuery(m_sql, m_sqlparams))
                &lt;span style="font-weight: bold"&gt;{&lt;/span&gt;
                    &lt;span style="font-weight: bold"&gt;while&lt;/span&gt; (rec.Read())
                        yield &lt;span style="font-weight: bold"&gt;return&lt;/span&gt; rec;
                &lt;span style="font-weight: bold"&gt;}&lt;/span&gt;
            &lt;span style="font-weight: bold"&gt;}&lt;/span&gt;
        &lt;span style="font-weight: bold"&gt;}&lt;/span&gt;

        &lt;span style="color: #999988; font-style: italic"&gt;//this is required because IEnumerable&amp;lt;&amp;gt; inherits IEnumerable. bleh.&lt;/span&gt;
        IEnumerator IEnumerable.GetEnumerator() &lt;span style="font-weight: bold"&gt;{&lt;/span&gt; &lt;span style="font-weight: bold"&gt;return&lt;/span&gt; GetEnumerator() &lt;span style="font-weight: bold"&gt;}&lt;/span&gt;
    &lt;span style="font-weight: bold"&gt;}&lt;/span&gt;
&lt;span style="font-weight: bold"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;This code should come in handy for more reasons than just its cleanliness.  
First off, if you ever need to change the idiom for accessing the DB, it's 
stored conveniently in one place.
&lt;p&gt;Second, It makes a prepared SQL call into something like a &lt;a 
href="http://en.wikipedia.org/wiki/Thunk"&gt;thunk&lt;/a&gt;: a bit of code representing 
a future computation that can then be passed around to be performed later. An 
example:
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span style="font-weight: bold"&gt;void&lt;/span&gt; &lt;span style="color: #990000; font-weight: bold"&gt;setUpQueries&lt;/span&gt;(nameId, addressId, custId)
&lt;span style="font-weight: bold"&gt;{&lt;/span&gt;
    List&amp;lt;SQL&amp;gt; stringsWeNeed = &lt;span style="font-weight: bold"&gt;new&lt;/span&gt; List(&lt;span style="font-weight: bold"&gt;new&lt;/span&gt; &lt;span style="color: #445588; font-weight: bold"&gt;object&lt;/span&gt;[]&lt;span style="font-weight: bold"&gt;{&lt;/span&gt;
        &lt;span style="font-weight: bold"&gt;new&lt;/span&gt; &lt;span style="color: #990000; font-weight: bold"&gt;SQL&lt;/span&gt;().query(&lt;span style="color: #bb8844"&gt;&amp;quot;SELECT name FROM names WHERE id=?&amp;quot;&lt;/span&gt;, nameId),
        &lt;span style="font-weight: bold"&gt;new&lt;/span&gt; &lt;span style="color: #990000; font-weight: bold"&gt;SQL&lt;/span&gt;().query(&lt;span style="color: #bb8844"&gt;&amp;quot;SELECT addy FROM addresses WHERE id=?&amp;quot;&lt;/span&gt;, addressId),
        &lt;span style="font-weight: bold"&gt;new&lt;/span&gt; &lt;span style="color: #990000; font-weight: bold"&gt;SQL&lt;/span&gt;().query(&lt;span style="color: #bb8844"&gt;&amp;quot;SELECT zip FROM customers WHERE id=?&amp;quot;&lt;/span&gt;, custId)&lt;span style="font-weight: bold"&gt;}&lt;/span&gt;);

    List&amp;lt;&lt;span style="color: #445588; font-weight: bold"&gt;string&lt;/span&gt;&amp;gt; strings = getOurStrings(stringsWeNeed);

    mangleStrings(strings);
&lt;span style="font-weight: bold"&gt;}&lt;/span&gt;

List&amp;lt;&lt;span style="color: #445588; font-weight: bold"&gt;string&lt;/span&gt;&amp;gt; getOurStrings(List&amp;lt;SQL&amp;gt; queries)
&lt;span style="font-weight: bold"&gt;{&lt;/span&gt;
    List&amp;lt;&lt;span style="color: #445588; font-weight: bold"&gt;string&lt;/span&gt;&amp;gt; strings = &lt;span style="font-weight: bold"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="color: #445588; font-weight: bold"&gt;string&lt;/span&gt;&amp;gt;();
    &lt;span style="font-weight: bold"&gt;foreach&lt;/span&gt; (SQL query &lt;span style="font-weight: bold"&gt;in&lt;/span&gt; queries)
    &lt;span style="font-weight: bold"&gt;{&lt;/span&gt;
        &lt;span style="font-weight: bold"&gt;foreach&lt;/span&gt; (IDataReader rec &lt;span style="font-weight: bold"&gt;in&lt;/span&gt; query)
            strings.Add(rec.GetString(&lt;span style="color: #009999"&gt;0&lt;/span&gt;));
    &lt;span style="font-weight: bold"&gt;}&lt;/span&gt;
    &lt;span style="font-weight: bold"&gt;return&lt;/span&gt; strings;
&lt;span style="font-weight: bold"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;While the example is silly, this property can be exploited to seperate 
declaration from execution, which I often find to be a useful pattern.
&lt;p&gt;Though I am far from the &lt;a 
href="http://www.base4.net/blog.aspx?ID=409"&gt;first person&lt;/a&gt; to discover this 
simplification, I did figure it out on my own and I thought it was neat enough 
to share.
&lt;p&gt;A quick disclaimer: the code here is modified from the original to remove 
some details, and is completely untested, and probably doesn't compile.  You 
may, however, use it or distribute it as you see fit; it's licensed under the 
&lt;a href="http://sam.zoy.org/wtfpl/"&gt;wtfpl&lt;/a&gt;.
&lt;p&gt;UPDATE: added the while(rec.Read()), which I'd forgotten
</summary>
		<content type="html">&lt;p&gt;At my job, we use what is essentially a custom C# ORM. Soon after I arrived, 
we adopted this idiom to pull a DB connection from the pool and run a query:
&lt;div class="highlight"&gt;&lt;pre&gt; &lt;span style="font-weight: bold"&gt;class&lt;/span&gt; &lt;span style="color: #445588; font-weight: bold"&gt;Something&lt;/span&gt;
&lt;span style="font-weight: bold"&gt;{&lt;/span&gt;
    &lt;span style="font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #445588; font-weight: bold"&gt;int&lt;/span&gt; &lt;span style="color: #990000; font-weight: bold"&gt;ourIdiom&lt;/span&gt;(&lt;span style="color: #445588; font-weight: bold"&gt;long&lt;/span&gt; identifier)
    &lt;span style="font-weight: bold"&gt;{&lt;/span&gt;
        &lt;span style="font-weight: bold"&gt;using&lt;/span&gt; (DBConnection db = &lt;span style="font-weight: bold"&gt;new&lt;/span&gt; DBConnection())
        &lt;span style="font-weight: bold"&gt;{&lt;/span&gt;
            &lt;span style="font-weight: bold"&gt;using&lt;/span&gt; (IDataReader rec = db.execQuery(&lt;span style="color: #bb8844"&gt;@&amp;quot;&lt;/span&gt;
&lt;span style="color: #bb8844"&gt;                SELECT some, rows&lt;/span&gt;
&lt;span style="color: #bb8844"&gt;                FROM  Table1 t1, Table2 t2&lt;/span&gt;
&lt;span style="color: #bb8844"&gt;                WHERE t1.t2id = t2.id&lt;/span&gt;
&lt;span style="color: #bb8844"&gt;                AND   t1.id = ?&amp;quot;&lt;/span&gt;,
                identifier))
            &lt;span style="font-weight: bold"&gt;{&lt;/span&gt;
                &lt;span style="font-weight: bold"&gt;while&lt;/span&gt; (rec.Read())
                    doSomething();
                &lt;span style="font-weight: bold"&gt;return&lt;/span&gt; &lt;span style="color: #009999"&gt;1&lt;/span&gt;;
            &lt;span style="font-weight: bold"&gt;}&lt;/span&gt;
        &lt;span style="font-weight: bold"&gt;}&lt;/span&gt;
    &lt;span style="font-weight: bold"&gt;}&lt;/span&gt;
&lt;span style="font-weight: bold"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Which is nice because it disposes of both the connection and the dataReader 
properly on failure, but ugly because it uses a whole bunch of boilerplate.  
Unfortunately, because doSomething() needs to execute inside both 
&lt;code&gt;using&lt;/code&gt; statements, and we weren't using C# 2.0 until a few months 
ago, the only way to avoid the boilerplate would have been to pass in 
delegates.
&lt;p&gt;This would have been just as ugly as keeping the boilerplate in the code, so 
we stuck with the using&lt;sup&gt;2&lt;/sup&gt; idiom.
&lt;p&gt;Since our switchover to 2.0 a few months ago, I've had an idea that I could 
make this idiom more concise and remove some boilerplate that I didn't get a 
chance to try until this week. Using 2.0's iterators, which seem awfully 
familiar from my python work, that can be reduced to:
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span style="font-weight: bold"&gt;class&lt;/span&gt; &lt;span style="color: #445588; font-weight: bold"&gt;Something&lt;/span&gt;
&lt;span style="font-weight: bold"&gt;{&lt;/span&gt;
    &lt;span style="font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #445588; font-weight: bold"&gt;int&lt;/span&gt; &lt;span style="color: #990000; font-weight: bold"&gt;ourIdiom&lt;/span&gt;(&lt;span style="color: #445588; font-weight: bold"&gt;long&lt;/span&gt; identifier)
    &lt;span style="font-weight: bold"&gt;{&lt;/span&gt;
        &lt;span style="font-weight: bold"&gt;foreach&lt;/span&gt; (IDataReader rec &lt;span style="font-weight: bold"&gt;in&lt;/span&gt; &lt;span style="font-weight: bold"&gt;new&lt;/span&gt; SQL().Query(&lt;span style="color: #bb8844"&gt;@&amp;quot;&lt;/span&gt;
&lt;span style="color: #bb8844"&gt;            SELECT some, rows&lt;/span&gt;
&lt;span style="color: #bb8844"&gt;            FROM  Table1 t1, Table2 t2&lt;/span&gt;
&lt;span style="color: #bb8844"&gt;            WHERE t1.t2id = t2.id&lt;/span&gt;
&lt;span style="color: #bb8844"&gt;            AND   t1.id = ?&amp;quot;&lt;/span&gt;,
            identifier))
        &lt;span style="font-weight: bold"&gt;{&lt;/span&gt;
            doSomething();
        &lt;span style="font-weight: bold"&gt;}&lt;/span&gt;
        &lt;span style="font-weight: bold"&gt;return&lt;/span&gt; &lt;span style="color: #009999"&gt;1&lt;/span&gt;;
    &lt;span style="font-weight: bold"&gt;}&lt;/span&gt;
&lt;span style="font-weight: bold"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;With some fairly simple code:
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span style="font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="font-weight: bold"&gt;class&lt;/span&gt; &lt;span style="color: #445588; font-weight: bold"&gt;SQL&lt;/span&gt; : 
    System.Collections.Generic.IEnumerable&amp;lt;IDataReader&amp;gt;
    &lt;span style="font-weight: bold"&gt;{&lt;/span&gt;
        &lt;span style="color: #445588; font-weight: bold"&gt;string&lt;/span&gt; m_sql;
        ArrayList m_sqlparams;

        &lt;span style="font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #990000; font-weight: bold"&gt;SQL&lt;/span&gt;()
        &lt;span style="font-weight: bold"&gt;{&lt;/span&gt;
        &lt;span style="font-weight: bold"&gt;}&lt;/span&gt;

        &lt;span style="font-weight: bold"&gt;public&lt;/span&gt; SQL &lt;span style="color: #990000; font-weight: bold"&gt;query&lt;/span&gt;(&lt;span style="color: #445588; font-weight: bold"&gt;string&lt;/span&gt; sql, &lt;span style="font-weight: bold"&gt;params&lt;/span&gt; &lt;span style="color: #445588; font-weight: bold"&gt;object&lt;/span&gt;[] sqlparams)
        &lt;span style="font-weight: bold"&gt;{&lt;/span&gt;
            m_sql = sql;
            m_sqlparams = &lt;span style="font-weight: bold"&gt;new&lt;/span&gt; ArrayList(sqlparams);
            &lt;span style="font-weight: bold"&gt;return&lt;/span&gt; &lt;span style="font-weight: bold"&gt;this&lt;/span&gt;;
        &lt;span style="font-weight: bold"&gt;}&lt;/span&gt;

        IEnumerator&amp;lt;IDataReader&amp;gt; IEnumerable&amp;lt;IDataReader&amp;gt;.GetEnumerator()
        &lt;span style="font-weight: bold"&gt;{&lt;/span&gt;
            &lt;span style="font-weight: bold"&gt;using&lt;/span&gt; (clsDBConnection db = &lt;span style="font-weight: bold"&gt;new&lt;/span&gt; clsDBConnection(m_dbname))
            &lt;span style="font-weight: bold"&gt;{&lt;/span&gt;
                &lt;span style="font-weight: bold"&gt;using&lt;/span&gt; (IDataReader rec = db.execQuery(m_sql, m_sqlparams))
                &lt;span style="font-weight: bold"&gt;{&lt;/span&gt;
                    &lt;span style="font-weight: bold"&gt;while&lt;/span&gt; (rec.Read())
                        yield &lt;span style="font-weight: bold"&gt;return&lt;/span&gt; rec;
                &lt;span style="font-weight: bold"&gt;}&lt;/span&gt;
            &lt;span style="font-weight: bold"&gt;}&lt;/span&gt;
        &lt;span style="font-weight: bold"&gt;}&lt;/span&gt;

        &lt;span style="color: #999988; font-style: italic"&gt;//this is required because IEnumerable&amp;lt;&amp;gt; inherits IEnumerable. bleh.&lt;/span&gt;
        IEnumerator IEnumerable.GetEnumerator() &lt;span style="font-weight: bold"&gt;{&lt;/span&gt; &lt;span style="font-weight: bold"&gt;return&lt;/span&gt; GetEnumerator() &lt;span style="font-weight: bold"&gt;}&lt;/span&gt;
    &lt;span style="font-weight: bold"&gt;}&lt;/span&gt;
&lt;span style="font-weight: bold"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;This code should come in handy for more reasons than just its cleanliness.  
First off, if you ever need to change the idiom for accessing the DB, it's 
stored conveniently in one place.
&lt;p&gt;Second, It makes a prepared SQL call into something like a &lt;a 
href="http://en.wikipedia.org/wiki/Thunk"&gt;thunk&lt;/a&gt;: a bit of code representing 
a future computation that can then be passed around to be performed later. An 
example:
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span style="font-weight: bold"&gt;void&lt;/span&gt; &lt;span style="color: #990000; font-weight: bold"&gt;setUpQueries&lt;/span&gt;(nameId, addressId, custId)
&lt;span style="font-weight: bold"&gt;{&lt;/span&gt;
    List&amp;lt;SQL&amp;gt; stringsWeNeed = &lt;span style="font-weight: bold"&gt;new&lt;/span&gt; List(&lt;span style="font-weight: bold"&gt;new&lt;/span&gt; &lt;span style="color: #445588; font-weight: bold"&gt;object&lt;/span&gt;[]&lt;span style="font-weight: bold"&gt;{&lt;/span&gt;
        &lt;span style="font-weight: bold"&gt;new&lt;/span&gt; &lt;span style="color: #990000; font-weight: bold"&gt;SQL&lt;/span&gt;().query(&lt;span style="color: #bb8844"&gt;&amp;quot;SELECT name FROM names WHERE id=?&amp;quot;&lt;/span&gt;, nameId),
        &lt;span style="font-weight: bold"&gt;new&lt;/span&gt; &lt;span style="color: #990000; font-weight: bold"&gt;SQL&lt;/span&gt;().query(&lt;span style="color: #bb8844"&gt;&amp;quot;SELECT addy FROM addresses WHERE id=?&amp;quot;&lt;/span&gt;, addressId),
        &lt;span style="font-weight: bold"&gt;new&lt;/span&gt; &lt;span style="color: #990000; font-weight: bold"&gt;SQL&lt;/span&gt;().query(&lt;span style="color: #bb8844"&gt;&amp;quot;SELECT zip FROM customers WHERE id=?&amp;quot;&lt;/span&gt;, custId)&lt;span style="font-weight: bold"&gt;}&lt;/span&gt;);

    List&amp;lt;&lt;span style="color: #445588; font-weight: bold"&gt;string&lt;/span&gt;&amp;gt; strings = getOurStrings(stringsWeNeed);

    mangleStrings(strings);
&lt;span style="font-weight: bold"&gt;}&lt;/span&gt;

List&amp;lt;&lt;span style="color: #445588; font-weight: bold"&gt;string&lt;/span&gt;&amp;gt; getOurStrings(List&amp;lt;SQL&amp;gt; queries)
&lt;span style="font-weight: bold"&gt;{&lt;/span&gt;
    List&amp;lt;&lt;span style="color: #445588; font-weight: bold"&gt;string&lt;/span&gt;&amp;gt; strings = &lt;span style="font-weight: bold"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="color: #445588; font-weight: bold"&gt;string&lt;/span&gt;&amp;gt;();
    &lt;span style="font-weight: bold"&gt;foreach&lt;/span&gt; (SQL query &lt;span style="font-weight: bold"&gt;in&lt;/span&gt; queries)
    &lt;span style="font-weight: bold"&gt;{&lt;/span&gt;
        &lt;span style="font-weight: bold"&gt;foreach&lt;/span&gt; (IDataReader rec &lt;span style="font-weight: bold"&gt;in&lt;/span&gt; query)
            strings.Add(rec.GetString(&lt;span style="color: #009999"&gt;0&lt;/span&gt;));
    &lt;span style="font-weight: bold"&gt;}&lt;/span&gt;
    &lt;span style="font-weight: bold"&gt;return&lt;/span&gt; strings;
&lt;span style="font-weight: bold"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;While the example is silly, this property can be exploited to seperate 
declaration from execution, which I often find to be a useful pattern.
&lt;p&gt;Though I am far from the &lt;a 
href="http://www.base4.net/blog.aspx?ID=409"&gt;first person&lt;/a&gt; to discover this 
simplification, I did figure it out on my own and I thought it was neat enough 
to share.
&lt;p&gt;A quick disclaimer: the code here is modified from the original to remove 
some details, and is completely untested, and probably doesn't compile.  You 
may, however, use it or distribute it as you see fit; it's licensed under the 
&lt;a href="http://sam.zoy.org/wtfpl/"&gt;wtfpl&lt;/a&gt;.
&lt;p&gt;UPDATE: added the while(rec.Read()), which I'd forgotten
</content>
	</entry>
</feed>
