<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>The Wayward WebLog : PDC</title><link>http://blogs.msdn.com/mattwar/archive/tags/PDC/default.aspx</link><description>Tags: PDC</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>LINQ to SQL: The Mapping Engine</title><link>http://blogs.msdn.com/mattwar/archive/2007/06/06/linq-to-sql-the-mapping-engine.aspx</link><pubDate>Thu, 07 Jun 2007 03:11:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3128538</guid><dc:creator>mattwar</dc:creator><slash:comments>14</slash:comments><comments>http://blogs.msdn.com/mattwar/comments/3128538.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mattwar/commentrss.aspx?PostID=3128538</wfw:commentRss><description>The primary purpose of any ORM system is to map relational data onto objects in your programming environment.  Mapping here refers to the meaning in the mathematical sense that there is a correspondence from one item to the other.  For example, a database row might map to an object, or a field in a database might map to a property. Some mappings are simple, like the ones I’ve already mentioned; others are more complex such as parts of multiple rows combining to form a single object.

...(&lt;a href="http://blogs.msdn.com/mattwar/archive/2007/06/06/linq-to-sql-the-mapping-engine.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3128538" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mattwar/archive/tags/Object+Relational/default.aspx">Object Relational</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/Code/default.aspx">Code</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/Data/default.aspx">Data</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/SQL/default.aspx">SQL</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/PDC/default.aspx">PDC</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/LINQ/default.aspx">LINQ</category></item><item><title>IQueryable’s Deep Dark Secret</title><link>http://blogs.msdn.com/mattwar/archive/2007/06/01/iqueryable-s-deep-dark-secret.aspx</link><pubDate>Fri, 01 Jun 2007 23:05:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3029463</guid><dc:creator>mattwar</dc:creator><slash:comments>7</slash:comments><comments>http://blogs.msdn.com/mattwar/comments/3029463.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mattwar/commentrss.aspx?PostID=3029463</wfw:commentRss><description>I love the IQueryable interface, but it’s got a dark checkered past that most of you might not know about.  IQueryable is a great way to expose your API or domain model for querying or provide a specialized query processor that can be used directly by LINQ.  It defines the pattern for you to gather-up a user’s query and present it to your processing engine as a single expression tree that you can either transform or interpret.  It’s the way LINQ becomes ‘integrated’ for many LINQ to XXX products.  Yet it was not supposed to be that way; with all that ease of use, plugging automatically into LINQ with an abundance of pre-written query operators at your disposal. You were not supposed to use it for your own ends. It was not meant for you at all.

...(&lt;a href="http://blogs.msdn.com/mattwar/archive/2007/06/01/iqueryable-s-deep-dark-secret.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3029463" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mattwar/archive/tags/Object+Relational/default.aspx">Object Relational</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/Language/default.aspx">Language</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/Code/default.aspx">Code</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/Data/default.aspx">Data</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/PDC/default.aspx">PDC</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/LINQ/default.aspx">LINQ</category></item><item><title>The Origin of LINQ to SQL</title><link>http://blogs.msdn.com/mattwar/archive/2007/05/31/the-origin-of-linq-to-sql.aspx</link><pubDate>Thu, 31 May 2007 21:52:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3011630</guid><dc:creator>mattwar</dc:creator><slash:comments>28</slash:comments><comments>http://blogs.msdn.com/mattwar/comments/3011630.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mattwar/commentrss.aspx?PostID=3011630</wfw:commentRss><description>LINQ to SQL, possibly Microsoft’s first OR/M to actually ship in ten years of trying, was never even supposed to exist.  

...(&lt;a href="http://blogs.msdn.com/mattwar/archive/2007/05/31/the-origin-of-linq-to-sql.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3011630" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mattwar/archive/tags/Object+Relational/default.aspx">Object Relational</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/Language/default.aspx">Language</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/Life/default.aspx">Life</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/Code/default.aspx">Code</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/Data/default.aspx">Data</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/SQL/default.aspx">SQL</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/PDC/default.aspx">PDC</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/LINQ/default.aspx">LINQ</category></item><item><title>Oops, we did it again</title><link>http://blogs.msdn.com/mattwar/archive/2006/05/10/oops-we-did-it-again.aspx</link><pubDate>Thu, 11 May 2006 01:49:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:594966</guid><dc:creator>mattwar</dc:creator><slash:comments>32</slash:comments><comments>http://blogs.msdn.com/mattwar/comments/594966.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mattwar/commentrss.aspx?PostID=594966</wfw:commentRss><description>&lt;P&gt;A new update to &lt;A href="http://msdn.microsoft.com/data/ref/linq/" mce_href="http://msdn.microsoft.com/data/ref/linq/"&gt;LINQ preview &lt;/A&gt;is available at MSDN site.&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;What's the coolest new feature?&amp;nbsp; IMHO, its IQueryable&amp;lt;T&amp;gt;.&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;DLINQ's query mechanism has been generalized and available for all to use as part of System.Query.&amp;nbsp; It implements the Standard Query Operators for you using expression nodes to represent the query. Your queries can now be truly polymorphic, written over a common abstraction and translated into the target environment only when you need it to.&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt; CustomersInLondon(&lt;SPAN style="COLOR: teal"&gt;IQueryable&lt;/SPAN&gt;&amp;lt;&lt;SPAN style="COLOR: teal"&gt;Customer&lt;/SPAN&gt;&amp;gt; customers) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt; count = (&lt;SPAN style="COLOR: blue"&gt;from&lt;/SPAN&gt; c &lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&gt; customers&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&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 style="COLOR: blue"&gt;where&lt;/SPAN&gt; c.City == &lt;SPAN style="COLOR: maroon"&gt;"&lt;?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /&gt;&lt;st1:City w:st="on"&gt;&lt;st1:place w:st="on"&gt;London&lt;/st1:place&gt;&lt;/st1:City&gt;"&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&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 style="COLOR: blue"&gt;select&lt;/SPAN&gt; c).Count();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;return&lt;/SPAN&gt; count;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Now you can define a function like this and it can operate on either an in memory collection or a remote DLINQ collection (or you own IQueryable for that matter.)&amp;nbsp; The query is then either run entirely locally or remotely depending on the target.&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;If its a DLINQ query a count query is sent to the database.&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;SELECT&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-bidi-font-family: 'Lucida Console'"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;COUNT&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-bidi-font-family: 'Lucida Console'"&gt;(*) &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;AS&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-bidi-font-family: 'Lucida Console'"&gt; [value]&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;FROM&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-bidi-font-family: 'Lucida Console'"&gt; [Customers] &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;AS&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-bidi-font-family: 'Lucida Console'"&gt; [t0]&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;WHERE&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-bidi-font-family: 'Lucida Console'"&gt; [t0].[City] = @p0&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;If its a normal CLR collection, the query is executed locally, using the System.Query.Sequence classes definitions of the standard query operators.&amp;nbsp; All you need to do is turn your IEnumerable&amp;lt;Customer&amp;gt; into IQueryable&amp;lt;Customer&amp;gt;.&amp;nbsp; This is accomplished easily with a built-in ToQueryable() method.&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: teal"&gt;List&lt;/SPAN&gt;&amp;lt;&lt;SPAN style="COLOR: teal"&gt;Customer&lt;/SPAN&gt;&amp;gt; customers = ...;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;CustomersInLondon(customers.ToQueryable());&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Wow!&amp;nbsp; That was easy.&amp;nbsp; But, how is this done?&amp;nbsp; How can you possible turn my List&amp;lt;T&amp;gt; into some queryable thingamabob?&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;Good question.&amp;nbsp; Glad you asked.&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;Check out this little gem:&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: teal"&gt;Expression&lt;/SPAN&gt;&amp;lt;&lt;SPAN style="COLOR: teal"&gt;Func&lt;/SPAN&gt;&amp;lt;&lt;SPAN style="COLOR: teal"&gt;Customer&lt;/SPAN&gt;,&lt;SPAN style="COLOR: blue"&gt;bool&lt;/SPAN&gt;&amp;gt;&amp;gt; predicate =&amp;nbsp;c =&amp;gt; c.City == &lt;SPAN style="COLOR: maroon"&gt;"&lt;st1:City w:st="on"&gt;&lt;st1:place w:st="on"&gt;London&lt;/st1:place&gt;&lt;/st1:City&gt;"&lt;/SPAN&gt;;&lt;SPAN style="mso-spacerun: yes"&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;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: teal"&gt;Func&lt;/SPAN&gt;&amp;lt;&lt;SPAN style="COLOR: teal"&gt;Customer&lt;/SPAN&gt;,&lt;SPAN style="COLOR: blue"&gt;bool&lt;/SPAN&gt;&amp;gt; d = predicate.Compile();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;Now you can compile lambda expressions directly into IL at runtime!&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;ToQueryable() wraps your IEnumerable&amp;lt;T&amp;gt; in IQueryable&amp;lt;T&amp;gt; clothing, uses the Queryable infrastructure to let you build up your own expression tree queries, and then when you enumerate it, the expression is rebound to refer to your IEnumerable&amp;lt;T&amp;gt; directly, the operators rebound to refer to System.Query.Sequence, and the resulting code is compiled using the built-in expression compiler.&amp;nbsp; That code is then&amp;nbsp;invoked producing your results.&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;Amazing, but true.&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;But wait, there is more!&amp;nbsp; Yes, it is true, not only can you slice, but you can also dice!&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;That's not the end of IQueryable&amp;lt;T&amp;gt;'s little bag of tricks.&amp;nbsp; What else could there be? How about dynamic queries, ones you can build up at runtime? Yes? No?&amp;nbsp; Say it isn't so!&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;It's true.&amp;nbsp; IQueryable&amp;lt;T&amp;gt; is fully dynamic.&amp;nbsp; Sort of.&amp;nbsp; Each IQueryable&amp;lt;T&amp;gt; has a method CreateQuery&amp;lt;S&amp;gt;() that creates a new IQueryable&amp;lt;S&amp;gt; (of the same concrete type) with a single Expression tree&amp;nbsp;argument.&amp;nbsp; That is, if I have an expression tree representing the code that defines a query, I can make an IQueryable&amp;lt;S&amp;gt; out of an old IQueryable&amp;lt;T&amp;gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;That's great you say, but you probably don't statically know what the 'T' and 'S' are in your program if you are building dynamic queries at runtime.&amp;nbsp; True, true, we've thought of that too. You see, IQueryable&amp;lt;T&amp;gt; has a smaller cousin, IQueryable, just like IEnumerable&amp;lt;T&amp;gt; has its little friend IEnumerable.&amp;nbsp; IQueryable is non-generic, but its ever so much a query as IQueryable&amp;lt;T&amp;gt;.&amp;nbsp; In fact, it has its own CreateQuery() method that builds a new IQueryable so you can do all this query building without all that static info getting in your way.&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;So how do you build the expression trees that make up a query.&amp;nbsp; Check out the System.Query.QueryExpression class.&amp;nbsp; It is a collection of static methods that correspond to the standard query operator pattern, but are more loosely typed, taking arguments that are Expression's instead of Expression&amp;lt;T&amp;gt;'s.&amp;nbsp; These methods do all the work necessary to build up the call nodes that represent calls to the more fully typed IQueryable&amp;lt;T&amp;gt; query operator methods.&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;Here's how you can dynamic build up the query in the prior example.&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;IQueryable&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt; q = ...;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;ParameterExpression&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt; p = &lt;SPAN style="COLOR: teal"&gt;Expression&lt;/SPAN&gt;.Parameter(&lt;SPAN style="COLOR: blue"&gt;typeof&lt;/SPAN&gt;(&lt;SPAN style="COLOR: teal"&gt;Customer&lt;/SPAN&gt;), &lt;SPAN style="COLOR: maroon"&gt;"c"&lt;/SPAN&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;Expression&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt; body = &lt;SPAN style="COLOR: teal"&gt;Expression&lt;/SPAN&gt;.EQ(&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Expression&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;.Property(p, &lt;SPAN style="COLOR: blue"&gt;typeof&lt;/SPAN&gt;(&lt;SPAN style="COLOR: teal"&gt;Customer&lt;/SPAN&gt;).GetProperty(&lt;SPAN style="COLOR: maroon"&gt;"City"&lt;/SPAN&gt;)),&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: teal"&gt;Expression&lt;/SPAN&gt;.Constant(&lt;SPAN style="COLOR: maroon"&gt;"&lt;st1:City w:st="on"&gt;&lt;st1:place w:st="on"&gt;London&lt;/st1:place&gt;&lt;/st1:City&gt;"&lt;/SPAN&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;LambdaExpression&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt; predicate = &lt;SPAN style="COLOR: teal"&gt;QueryExpression&lt;/SPAN&gt;.Lambda(body, p);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;Expression&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt; where = &lt;SPAN style="COLOR: teal"&gt;QueryExpression&lt;/SPAN&gt;.Where(q.Expression, predicate);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;q = q.CreateQuery(where);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;You can then call GetEnumerator() on 'q' to execute the query.&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;Too hard you say?&amp;nbsp; Do I have to write &lt;EM&gt;all&lt;/EM&gt; that code?&amp;nbsp; What if I just want my users to type in a little filter expression.&amp;nbsp; Do I have to turn that into all those nodes?&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;Ah, well, we've thought of that too.&amp;nbsp; Try this out.&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;IQueryable&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt; q = ...;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;ParameterExpression&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt; p = &lt;SPAN style="COLOR: teal"&gt;Expression&lt;/SPAN&gt;.Parameter(&lt;SPAN style="COLOR: blue"&gt;typeof&lt;/SPAN&gt;(&lt;SPAN style="COLOR: teal"&gt;Customer&lt;/SPAN&gt;), &lt;SPAN style="COLOR: maroon"&gt;"c"&lt;/SPAN&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;LambdaExpression&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt; predicate = &lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: teal"&gt;QueryExpression&lt;/SPAN&gt;.Lambda(&lt;SPAN style="COLOR: maroon"&gt;"c.City = '&lt;st1:City w:st="on"&gt;&lt;st1:place w:st="on"&gt;London&lt;/st1:place&gt;&lt;/st1:City&gt;'"&lt;/SPAN&gt;, p);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;Expression&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt; where = &lt;SPAN style="COLOR: teal"&gt;QueryExpression&lt;/SPAN&gt;.Where(q.Expression, predicate);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;q = q.CreateQuery(where);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Or if you don't want them to have to type silly dot's, just don't give the parameter a name.&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;IQueryable&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt; q = ...;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;ParameterExpression&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt; p = &lt;SPAN style="COLOR: teal"&gt;Expression&lt;/SPAN&gt;.Parameter(&lt;SPAN style="COLOR: blue"&gt;typeof&lt;/SPAN&gt;(&lt;SPAN style="COLOR: teal"&gt;Customer&lt;/SPAN&gt;), &lt;SPAN style="COLOR: maroon"&gt;""&lt;/SPAN&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;LambdaExpression&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt; predicate = &lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: teal"&gt;QueryExpression&lt;/SPAN&gt;.Lambda(&lt;SPAN style="COLOR: maroon"&gt;"City = '&lt;st1:City w:st="on"&gt;&lt;st1:place w:st="on"&gt;London&lt;/st1:place&gt;&lt;/st1:City&gt;'"&lt;/SPAN&gt;, p);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;Expression&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt; where = &lt;SPAN style="COLOR: teal"&gt;QueryExpression&lt;/SPAN&gt;.Where(q.Expression, predicate);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;q = q.CreateQuery(where);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;Viola!&amp;nbsp; Instant&amp;nbsp;filter.&amp;nbsp;Instant dynamic query. Run it here. Run it there. Why, you can run it everywhere.&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;But that's enough from me.&amp;nbsp;Why are you wasting time reading this when you could be downloading the preview and trying it out for yourself?&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;Matt&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-bidi-font-family: 'Lucida Console'"&gt;&amp;nbsp;&lt;/P&gt;&lt;/SPAN&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=594966" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mattwar/archive/tags/Object+Relational/default.aspx">Object Relational</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/Code/default.aspx">Code</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/Rave/default.aspx">Rave</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/Data/default.aspx">Data</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/SQL/default.aspx">SQL</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/PDC/default.aspx">PDC</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/LINQ/default.aspx">LINQ</category></item><item><title>Beyond the Query</title><link>http://blogs.msdn.com/mattwar/archive/2006/04/19/beyond-the-query.aspx</link><pubDate>Wed, 19 Apr 2006 10:20:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:578791</guid><dc:creator>mattwar</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/mattwar/comments/578791.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mattwar/commentrss.aspx?PostID=578791</wfw:commentRss><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;I have been working a long time to bring queries into a modern programming language. Seven years ago I looked beyond ORM and saw the next horizon, a new world where boundaries between data are blurred and popular paradigms from different disciplines combine. Many have tried to convince me that it is simply a mirage, and maybe in some respects it is, but as with anything else there is often a lot of utility born out of imperfection. I have been marching steadily toward that horizon ever since.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;I also realize much of it has been done before. From academic languages to real world database scripting engines, the concept of the query itself is nothing new. Yet, it has never been mainstream before, baked in as a first-class feature of a general purpose programming language.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;It is no longer a novelty, applicable to only a single domain, each domain with its own variant, bound in shackles, caged like&amp;nbsp;a dangerous animal. It is becoming something real, something you can reason about and rely on, a permanent fixture of the natural programming environment, a part of its substrate.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;And I’m not just out to promote a particular language. In a few years, there won’t be a language without queries. Eventually, queries will become one of the most used tools in your toolbox. And not just for databases; all aspects of your application will be queryable to some degree, allowing you the freedom to apply set-like operations anywhere and everywhere. Queries will bring power through simplicity and abstraction. What was once proscriptive will become descriptive, pushing more and more of the gritty details down into the runtime. And still the benefit will go beyond merely your personal productivity boost. The next horizon is already in sight. Queries will eventually become runtime optimized. They will enable automatic parallelism, scaling and distributed processing. &lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Yet,&amp;nbsp;we are&amp;nbsp;not there yet. With the help of a lot of other people, I’ve only just arrived at that first horizon, a place where the mirage forms into solid shapes and the world that I only imagined becomes substantive, where I can look out across the landscape of all that was devised and see it functioning, its clockwork gears spinning, its implications twinkling like dew upon fields of freshly grown grass. And I can simply query it, all of it, the grass, the trees, anything identifiable and enumerable. And it just works. &lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Yet in the midst of all that, I am overcome with another thought. Another horizon has opened up in my mind and I can see a bit further, beyond the benefits and the boosts, beyond the query itself. I can see now that it was only the first stepping stone. Something much bigger is out there. A paradigm shift is coming, where all things become fluid, all boundaries dissolve and intent becomes first class. &lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;And it has certainly all been done before.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Matt&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=578791" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mattwar/archive/tags/Object+Relational/default.aspx">Object Relational</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/Language/default.aspx">Language</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/Code/default.aspx">Code</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/Data/default.aspx">Data</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/PDC/default.aspx">PDC</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/LINQ/default.aspx">LINQ</category></item><item><title>Citizen Statistics</title><link>http://blogs.msdn.com/mattwar/archive/2006/01/31/521719.aspx</link><pubDate>Wed, 01 Feb 2006 10:23:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:521719</guid><dc:creator>mattwar</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/mattwar/comments/521719.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mattwar/commentrss.aspx?PostID=521719</wfw:commentRss><description>&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;I was on my way to post that my site had not actually been blocked by a foreign government, aside from all the rumors spread recently, that the truth was I had just been&amp;nbsp;incredibly negligent at forming any coherent thoughts or communicating in general beyond my regular guest appearances on several late night talk shows, when to what to my wondering eyes did appear, but a survey popup for MSN. &lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;What had I done to deserve this? Was it some crime in another life, a karmic imbalance on my metaphysical spreadsheet? The appearance had been dramatically tied to my subconscious desire to post. Was there actually a connection? Had the angst of a disillusioned technorati, spurned by my inattentiveness, an undercurrent of outrage simmering for the last few months as the euphoria of the Yoda post was left to wane, whither, and finally die, leaving only the deep unavoidable depression, a vacuous hole unable to be filled by the inadequacies of the surrogate posters, the trivial news bits, the mindless slash-dot like debates, could all of this negativity have possibly culminated into a single psychic backlash, a lightning arc of loathing striking out across the electric ether and manifesting itself upon the screen of this singular purveyor of punditry, alone, at his desk, at midnight, a gruesome request to please answer a few questions, fill in a few blanks like a good sample citizen of our target-market society?&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;I suppose I’ll never know. However, rest assured the message has been received, loud, clear and in stylized markup. For back to the grindstone I go, feverously cranking out follow on posts with clever and witty humor, enlisting all sorts of Star Wars euphemisms and characterizations in an attempt to bring peace to the cosmos of our disenfranchised, though somewhat wayward, community. &lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;And fear not from where I shall draw forth such an abundance&amp;nbsp;of interesting topics for my specialized editorials. With Ruby on Rails on the loose, finding something to take pot shots at has never been easier. &lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Still, though, with all the other options available to you the reader, and with a blogroll share dipping into the low zero-percentile, it has come to my attention that I need to offer a more targeted and customized service if I want to find a true niche and a loyal reader base. So if you could take a few moments to fill out the following questionnaire it would be much appreciated. Your answers will be tallied, tabulated, scored, scorched, indexed, cross-indexed, pivoted, hot-keyed and your phone numbers placed on my speed dial, all in conformance with our standard, substandard, privacy and security policies. &lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Your personal anonymous input is highly valued.&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;How do you feel about filling out questionnaires?&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;[ ] S’okay, S’alright.&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;[ ] Don’t bug me, I bite&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;[ ] I’ve got a loaded gun and know how to use it.&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;Which sort of sarcasm do you prefer?&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;[ ] Dark&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;[ ] Semisweet&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;[ ] Milk&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;[ ] Candy coated&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;How many readers made it this far?&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;[ ] All of them&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;[ ] None of them&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;[ ] Dang, it’s just me again, isn’t it?&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;Which sign off do you prefer?&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;[ ] But I digress&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=521719" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mattwar/archive/tags/Humor/default.aspx">Humor</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/PDC/default.aspx">PDC</category></item><item><title>YODA the Programming Language</title><link>http://blogs.msdn.com/mattwar/archive/2005/10/09/yoda-the-programming-language.aspx</link><pubDate>Mon, 10 Oct 2005 08:34:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:479008</guid><dc:creator>mattwar</dc:creator><slash:comments>41</slash:comments><comments>http://blogs.msdn.com/mattwar/comments/479008.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mattwar/commentrss.aspx?PostID=479008</wfw:commentRss><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Now that LINQ is out the door, so to speak, I can start focusing my efforts on the next next technology here at Microsoft. Ever since I joined up with the C# team nearly two years ago I’ve been frustrated by my inability to wax poetic about all the goodness we were working on. I was sworn to secrecy. Mum was the word. Perhaps if you were paying attention to the work in C# 2.0 and C-Omega, you may have guessed what was to come. Looking back, it’s easy enough to recognize it in the design of Generics, Iterators and Anonymous methods. The existence of Nullables in there as well should have made it obvious. We were planning ahead for the big pay off, language integrated query.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;You may be amazed that so much planning goes on in the features that we roll out version to version. Sometimes big ideas and far-reaching visions take many releases to come to fruition. You cannot always do them in one release. Sometimes you have to take a risk and dole them out piece by piece. This may cause a bit of confusion at first, when no one can truly understand why a particular feature was included and not others, or why one design was chosen. Yet once all the pieces are together you can finally make sense of it all, and then as if by magic it all just seems right.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Of course, this time is no different than the last. We planned ahead and baked in features into C# 3.0 that will lay the foundation for the next big thing. LINQ is only the start of the revolution. Yet, unlike last time, the features we added now make it rather obvious what is&amp;nbsp;coming next. If you connect the dots in your mind and extrapolate just a bit you’ll see what I’m getting at. You’ll begin to notice that’s its not just about query in the language, or first order functions or everything else that seems to be borrowed from languages of yore.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;No, these pieces are just stepping stones for what is yet to come, something truly original; a next generation programming language.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;The evidence is there right now, plain to see. The query expression exhibits it quite clearly. Yet, that’s just for starters. Eventually, the same degree of innovation will influence the rest of the language, and then you’ll have something quite different, a language the likes of which you have not seen before, one that is simple and elegant, yet secretly powerful: a YODA-like programming language.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;You see, putting the ‘from’ ahead of the ‘select’ was not by accident. Soon the whole language will be re-arranged in an effort to make expressing intent easier and more logical.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Instead of the cryptic c-like syntax below:&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 4pt; BACKGROUND: #d9d9d9; PADDING-BOTTOM: 1pt; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 1pt; BORDER-BOTTOM: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt"&gt;
&lt;P class=MsoNormal style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0in; BORDER-TOP: medium none; PADDING-LEFT: 0in; BACKGROUND: #d9d9d9; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; BORDER-LEFT: medium none; PADDING-TOP: 0in; BORDER-BOTTOM: medium none; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt"&gt;&lt;SPAN style="COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0in; BORDER-TOP: medium none; PADDING-LEFT: 0in; BACKGROUND: #d9d9d9; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; BORDER-LEFT: medium none; PADDING-TOP: 0in; BORDER-BOTTOM: medium none; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt"&gt;&lt;SPAN style="COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;public&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt; &lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt; &lt;/SPAN&gt;&lt;?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /&gt;&lt;st1:place&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;Main&lt;/SPAN&gt;&lt;/st1:place&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;(&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt;[] args) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0in; BORDER-TOP: medium none; PADDING-LEFT: 0in; BACKGROUND: #d9d9d9; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; BORDER-LEFT: medium none; PADDING-TOP: 0in; BORDER-BOTTOM: medium none; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt; tab-stops: 3.5in"&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: teal"&gt;Console&lt;/SPAN&gt;.WriteLine(“Hello World”);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0in; BORDER-TOP: medium none; PADDING-LEFT: 0in; BACKGROUND: #d9d9d9; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; BORDER-LEFT: medium none; PADDING-TOP: 0in; BORDER-BOTTOM: medium none; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt"&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0in; BORDER-TOP: medium none; PADDING-LEFT: 0in; BACKGROUND: #d9d9d9; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; BORDER-LEFT: medium none; PADDING-TOP: 0in; BORDER-BOTTOM: medium none; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt"&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/DIV&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;We will now have eloquent YODA-like syntax:&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 4pt; BACKGROUND: #e0e0e0; PADDING-BOTTOM: 1pt; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 1pt; BORDER-BOTTOM: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt"&gt;
&lt;P class=MsoNormal style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0in; BORDER-TOP: medium none; PADDING-LEFT: 0in; BACKGROUND: #e0e0e0; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; BORDER-LEFT: medium none; PADDING-TOP: 0in; BORDER-BOTTOM: medium none; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt"&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0in; BORDER-TOP: medium none; PADDING-LEFT: 0in; BACKGROUND: #e0e0e0; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; BORDER-LEFT: medium none; PADDING-TOP: 0in; BORDER-BOTTOM: medium none; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt"&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;(args of &lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; many are they) &lt;/SPAN&gt;&lt;st1:place&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;Main&lt;/SPAN&gt;&lt;/st1:place&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt; is what they seek yet &lt;SPAN style="COLOR: blue"&gt;return&lt;/SPAN&gt; they do not. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0in; BORDER-TOP: medium none; PADDING-LEFT: 0in; BACKGROUND: #e0e0e0; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; BORDER-LEFT: medium none; PADDING-TOP: 0in; BORDER-BOTTOM: medium none; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt"&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0in; BORDER-TOP: medium none; PADDING-LEFT: 0in; BACKGROUND: #e0e0e0; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; BORDER-LEFT: medium none; PADDING-TOP: 0in; BORDER-BOTTOM: medium none; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt"&gt;&lt;SPAN style="COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;Brace&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt; you must &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0in; BORDER-TOP: medium none; PADDING-LEFT: 0in; BACKGROUND: #e0e0e0; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; BORDER-LEFT: medium none; PADDING-TOP: 0in; BORDER-BOTTOM: medium none; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt"&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Written it is, the &lt;SPAN style="COLOR: teal"&gt;Console&lt;/SPAN&gt;. “Hello World”&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0in; BORDER-TOP: medium none; PADDING-LEFT: 0in; BACKGROUND: #e0e0e0; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; BORDER-LEFT: medium none; PADDING-TOP: 0in; BORDER-BOTTOM: medium none; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt"&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/DIV&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;I know it’s difficult to believe, as strange as it seems. Yet, sometime in the future, everyone will be writing software this way. Knowing this, it makes my work so much more invigorating. I can literally feel the electricity in the air around here. It’s like some queer energetic force. &lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;But I digress&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Matt&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=479008" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mattwar/archive/tags/Humor/default.aspx">Humor</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/Language/default.aspx">Language</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/PDC/default.aspx">PDC</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/LINQ/default.aspx">LINQ</category></item><item><title>What the World is saying about LINQ</title><link>http://blogs.msdn.com/mattwar/archive/2005/09/21/what-the-world-is-saying-about-linq.aspx</link><pubDate>Thu, 22 Sep 2005 04:07:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:472590</guid><dc:creator>mattwar</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/mattwar/comments/472590.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mattwar/commentrss.aspx?PostID=472590</wfw:commentRss><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;“LINQ is totally awesome. It’s like this thing that you use to condense your entire application into one line of demo code. Sweet!” - &lt;?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /&gt;&lt;st1:City w:st="on"&gt;&lt;st1:place w:st="on"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;Stanley&lt;/I&gt;&lt;/st1:place&gt;&lt;/st1:City&gt;&lt;I style="mso-bidi-font-style: normal"&gt; Morgan&lt;/I&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;“LINQ is divine but DLINQ is a delinquent. It gives programmers too much power and makes programming against data way too easy. Is nothing sacred anymore?” – &lt;I style="mso-bidi-font-style: normal"&gt;Ned Flanders&lt;/I&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;“Lambdas are old school. LISP had these decades ago. If all you want to do is be a sheep then go right ahead. I prefer ACME.” – &lt;I style="mso-bidi-font-style: normal"&gt;Wyle E Coyote&lt;/I&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;“I can’t remember what they are called, but those things you make to build up a result out of a bunch of braces and stuff are really cool.” - &lt;I style="mso-bidi-font-style: normal"&gt;Anonymous&lt;/I&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;“LINQ will change the way we think about thinking about programs without requiring us to actually think about them.” – &lt;I style="mso-bidi-font-style: normal"&gt;National Research Council&lt;/I&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;“LINQ puts the 3GL back in the 4GLs, together making a 7GL!” – &lt;I style="mso-bidi-font-style: normal"&gt;Guy Steele&lt;o:p&gt;&lt;/o:p&gt;&lt;/I&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/I&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;“LINQ is the next best thing since sliced bread. Before LINQ we had to cut those database loaves up ourselves. It was a mess. Now programming against data is as easy as simply selecting the slices we want. Anyone seen that plastic doodad that holds the bag closed?” – &lt;I style="mso-bidi-font-style: normal"&gt;Heimlich&lt;/I&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;“LINQ is the best party game I’ve played in a long time.”&lt;EM&gt; – Jeff Bezos&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/EM&gt;&lt;A href="http://www.amazon.com/exec/obidos/tg/detail/-/B0002TGC38/ref=pd_cps_t_1/102-2997619-1491357?v=glance&amp;amp;s=toys" mce_href="http://www.amazon.com/exec/obidos/tg/detail/-/B0002TGC38/ref=pd_cps_t_1/102-2997619-1491357?v=glance&amp;amp;s=toys"&gt;&lt;EM&gt;&lt;IMG src="http://images.amazon.com/images/P/B0002TGC38.01._SCMZZZZZZZ_.jpg" width=32 mce_src="http://images.amazon.com/images/P/B0002TGC38.01._SCMZZZZZZZ_.jpg"&gt;&lt;/EM&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;EM&gt;&lt;/EM&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=472590" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mattwar/archive/tags/Humor/default.aspx">Humor</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/Object+Relational/default.aspx">Object Relational</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/Language/default.aspx">Language</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/Code/default.aspx">Code</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/Data/default.aspx">Data</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/PDC/default.aspx">PDC</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/LINQ/default.aspx">LINQ</category></item><item><title>LINQ Designer Receives Prestigious Award at PDC</title><link>http://blogs.msdn.com/mattwar/archive/2005/09/19/linq-designer-receives-prestigious-award-at-pdc.aspx</link><pubDate>Tue, 20 Sep 2005 09:36:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:471671</guid><dc:creator>mattwar</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/mattwar/comments/471671.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mattwar/commentrss.aspx?PostID=471671</wfw:commentRss><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;In the wake and fanfare of the disclosure of the LINQ technology preview at the PDC 2005 in &lt;?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /&gt;&lt;st1:City&gt;&lt;st1:place&gt;Los Angeles&lt;/st1:place&gt;&lt;/st1:City&gt; this last week, a member of the LINQ design team was presented with a prestigious award for outstanding achievement above and beyond his peers.&amp;nbsp;Erik Meijer, most known for his antics as "Head in the Box" for VB TV and author of many research and academic papers such as "Programming with Circles, Triangles, Rectangles and other 3rd grade geometry", was surprised to find himself the award’s recipient.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;“The competition was pretty tough,” he was heard to say as he was lead off stage. “I had no idea I would win this thing. I just knew I had to try.”&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;I interviewed Erik the next day, sometime past &lt;st1:time Hour="12" Minute="0"&gt;noon&lt;/st1:time&gt; when he had recovered from the celebration enough to speak coherently.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Did you ever think that your work on Haskell, VB, C-Omega and now LINQ would culminate in this?&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;I’m not sure what you mean. Really, that prior work speaks for itself. There’s a lot of crazy stuff in there, even for me. If you lay them out, side by side, you can see each one progressing further and further, each language referring back and forth to each other over time.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;It’s so Escher&lt;/I&gt;.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Speaking of crazy, you’re quite well known for your antics with “Head in the Box” and your wild ideas on programming languages evidenced by your numerous publications. Are these things what drove you toward the achievement last night?&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;Definitely. Everyone knows I’m a risk taker. I like to do wild and crazy things. Languages are just one of them. It’s like surfing, parasailing or sky-diving, you’ve just got to hang and on a go for it. &lt;o:p&gt;&lt;/o:p&gt;&lt;/I&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/I&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Did you always think you had what it takes to be a winner like this?&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;It’s not something you think about. It’s just something you do. Like when the guys in the data team asked me to help think about querying in programming languages and I didn’t really know what to do, so I just started spouting off about triangles and whatnot, waiting for their eyes to glaze over. That gave me the time to put together a plan. It’s just a skill I have I guess, my competitive side showing through. When everything came around again with LINQ I knew the geometry play would not be enough, so I tossed ‘Monads’ at them like a stun grenade. You should have been there.&lt;o:p&gt;&lt;/o:p&gt;&lt;/I&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;What about ‘homomorphic lifting’? You’ve been heard to utter that one on occasion.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;Yes, that too. Except that one still works. It’s always good for a laugh. It puts the design team into a tizzy.&lt;o:p&gt;&lt;/o:p&gt;&lt;/I&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;So what do you think sealed the win for you last night? Was it your zest for life? Was it your competitiveness?&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;Well, it definitely had something to do with the large protein shake made from fish guts, liver and insect parts.&lt;o:p&gt;&lt;/o:p&gt;&lt;/I&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Well, there you have it, Erik Meijer, LINQ designer and winner of Universal Studio’s Fear Factor Live. It’s the programming that drove him crazy; crazy enough to be a winner.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=471671" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mattwar/archive/tags/Lunacy/default.aspx">Lunacy</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/PDC/default.aspx">PDC</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/LINQ/default.aspx">LINQ</category></item><item><title>LINQ, BB’s and the HTTP’ness</title><link>http://blogs.msdn.com/mattwar/archive/2005/09/13/linq-bb-s-and-the-http-ness.aspx</link><pubDate>Wed, 14 Sep 2005 00:42:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:465095</guid><dc:creator>mattwar</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/mattwar/comments/465095.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mattwar/commentrss.aspx?PostID=465095</wfw:commentRss><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;The Language Integrated Query (LINQ) demo during the PDC demo was exciting. There was applause all around whenever different products were shown and different speakers were introduced, yet when the LINQ demo was shown there was a lot of talk within the crowd, oohs and aahs, and a bunch of OMG-this-is-cool’s. The attendee sitting next to me pulled out his notepad and started writing down everything he saw. After two hours of keynote before it, it was the only thing worthy to write down.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Anders gave the demo along with Don Box as part of a large multi-technology demo showing off the LINQ project, Indigo, Atlas and Avalon. The LINQ part was first and formed the foundation of the rest of the demo. The demo was written using the new preview version of the C# 3.0 compiler and an object-relational API we refer to as D-LINQ, both of which I’ve been working on for the last two years. Similar language features that enable queries in C# will eventually be in VB as well, or &lt;I style="mso-bidi-font-style: normal"&gt;BB&lt;/I&gt; as Anders was heard to call it by the automatic voice to text translator overlaid on the keynote’s projection screen. Don’t you just love technology?&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Anders had Don (his code monkey) write a query against the framework to find all the processes with a working set greater than 4 MB. The code looked something like this.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 4pt; BACKGROUND: #d9d9d9; PADDING-BOTTOM: 1pt; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 1pt; BORDER-BOTTOM: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt; mso-element: para-border-div"&gt;
&lt;P class=MsoNormal style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0in; BORDER-TOP: medium none; PADDING-LEFT: 0in; BACKGROUND: #d9d9d9; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; BORDER-LEFT: medium none; PADDING-TOP: 0in; BORDER-BOTTOM: medium none; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0in; BORDER-TOP: medium none; PADDING-LEFT: 0in; BACKGROUND: #d9d9d9; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; BORDER-LEFT: medium none; PADDING-TOP: 0in; BORDER-BOTTOM: medium none; mso-layout-grid-align: none; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;var&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; q = &lt;SPAN style="COLOR: blue"&gt;from&lt;/SPAN&gt; p &lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&gt; &lt;SPAN style="COLOR: teal"&gt;Process&lt;/SPAN&gt;.GetProcesses()&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0in; BORDER-TOP: medium none; PADDING-LEFT: 0in; BACKGROUND: #d9d9d9; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; BORDER-LEFT: medium none; PADDING-TOP: 0in; BORDER-BOTTOM: medium none; mso-layout-grid-align: none; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;where&lt;/SPAN&gt; p.WorkingSet &amp;gt; 1024 * 1024 * 4&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0in; BORDER-TOP: medium none; PADDING-LEFT: 0in; BACKGROUND: #d9d9d9; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; BORDER-LEFT: medium none; PADDING-TOP: 0in; BORDER-BOTTOM: medium none; mso-layout-grid-align: none; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;select&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; {p.ProcessName, p.WorkingSet};&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0in; BORDER-TOP: medium none; PADDING-LEFT: 0in; BACKGROUND: #d9d9d9; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; BORDER-LEFT: medium none; PADDING-TOP: 0in; BORDER-BOTTOM: medium none; mso-layout-grid-align: none; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0in; BORDER-TOP: medium none; PADDING-LEFT: 0in; BACKGROUND: #d9d9d9; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; BORDER-LEFT: medium none; PADDING-TOP: 0in; BORDER-BOTTOM: medium none; mso-layout-grid-align: none; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;foreach&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;(&lt;SPAN style="COLOR: blue"&gt;var&lt;/SPAN&gt; p &lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&gt; q) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0in; BORDER-TOP: medium none; PADDING-LEFT: 0in; BACKGROUND: #d9d9d9; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; BORDER-LEFT: medium none; PADDING-TOP: 0in; BORDER-BOTTOM: medium none; mso-layout-grid-align: none; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: teal"&gt;Console&lt;/SPAN&gt;.WriteLine(&lt;SPAN style="COLOR: maroon"&gt;"{0,-30} {1}"&lt;/SPAN&gt;, p.ProcessName, p.WorkingSet); &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0in; BORDER-TOP: medium none; PADDING-LEFT: 0in; BACKGROUND: #d9d9d9; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; BORDER-LEFT: medium none; PADDING-TOP: 0in; BORDER-BOTTOM: medium none; mso-layout-grid-align: none; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0in; BORDER-TOP: medium none; PADDING-LEFT: 0in; BACKGROUND: #d9d9d9; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; BORDER-LEFT: medium none; PADDING-TOP: 0in; BORDER-BOTTOM: medium none; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;&lt;/DIV&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;The new C# 3.0 language has a construct known as a &lt;I style="mso-bidi-font-style: normal"&gt;query expression&lt;/I&gt;. It looks a little bit like SQL yet not exactly. The select clause comes at the end. It written this way so the ‘range variables’ are specified up front making it possible for intellisense to aid you as you type. The select clause specifies a single expression, however you can use a new language feature known as anonymous type initializers (show in this example) to project the results into a new shape.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;After the queries were written, Anders turned the floor back over to Don who with the help of Chris Anderson went off to turn the application into a web service. At this point Don muttered something about the protocol layer, noting its HTTP’ness. That’s when I knew&amp;nbsp;I had&amp;nbsp;a blog post.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Anyway, I’m busy working at the PDC, no time to explain more. Check out the LINQ online &lt;A href="http://msdn.microsoft.com/netframework/future/linq/" mce_href="http://msdn.microsoft.com/netframework/future/linq/"&gt;website&lt;/A&gt; for more details. Download the preview compiler and the whitepapers. There’s also a download for the VB 9.0 preview with a bunch of XML integration. Check that out too. &lt;SPAN style="FONT-FAMILY: Wingdings; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-char-type: symbol; mso-symbol-font-family: Wingdings"&gt;&lt;SPAN style="mso-char-type: symbol; mso-symbol-font-family: Wingdings"&gt;J&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Matt&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=465095" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mattwar/archive/tags/Object+Relational/default.aspx">Object Relational</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/Code/default.aspx">Code</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/Data/default.aspx">Data</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/PDC/default.aspx">PDC</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/LINQ/default.aspx">LINQ</category></item><item><title>ObjectSpaces:There and Back Again</title><link>http://blogs.msdn.com/mattwar/archive/2005/09/12/objectspaces-there-and-back-again.aspx</link><pubDate>Tue, 13 Sep 2005 01:14:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:464200</guid><dc:creator>mattwar</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/mattwar/comments/464200.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mattwar/commentrss.aspx?PostID=464200</wfw:commentRss><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;It seems fitting to make one last tribute to ObjectSpaces on the eve of the PDC. Last time around Luca was good enough to break the news to everyone, that ObjectSpaces was undergoing realignment with WinFS. That it was being pulled out of Whidbey and would or should appear sometime later. But we all knew what that meant.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;ObjectSpaces was a big part of my life, my career for a long time. I was involved in its birth, its conception. The first preview appearing years ago at the PDC; that was my prototype, my code, as awkward and ugly as it was, opath, spans and all. A talented team of developers gave you the next preview and so on. I went away to work on something else, but ObjectSpaces was still on my mind. In fact, the reason I walked away was for the chance to work on what I believed to be the next logical step forward. ORM was only half the picture. The state of the art was still API’s, with queries in strings; opath was still another language.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;With the Xen project we proved that modern programming languages could be modified to include basic concepts such as query. We borrowed a lot from other languages, functional and otherwise. Streams became a natural concept as well as query expressions, (aka comprehensions to language-heads). Yet we went beyond and tied it all together, all the way down to the database, and by doing so put the ease of 4GL database programming back into the hands of developers, without co-opting the language, without tying it directly to one product, making query more general purpose, making it work for XML and any in-memory data structure.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Now we are on the verge of a new era. Language Integrated Query in C#, VB and anyone else that wants to play along. &lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Details tomorrow.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Matt &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=464200" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mattwar/archive/tags/Object+Relational/default.aspx">Object Relational</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/Code/default.aspx">Code</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/Data/default.aspx">Data</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/PDC/default.aspx">PDC</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/LINQ/default.aspx">LINQ</category></item><item><title>Language Integrated Quirks</title><link>http://blogs.msdn.com/mattwar/archive/2005/08/29/language-integrated-quirks.aspx</link><pubDate>Mon, 29 Aug 2005 23:35:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:457641</guid><dc:creator>mattwar</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/mattwar/comments/457641.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mattwar/commentrss.aspx?PostID=457641</wfw:commentRss><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;It’s done. The pencils are down. The bits are baked. No more time for polish and there’s no turning back. Like a snapshot of the last two years of my life, the binaries have frozen in place all that my fingers have wrought, all the lines of logic, all the code, all the defects, all on disk now, a stable moment in time, a silent pause before the wind picks up again the bits are carried away like seeds, replicated far out into the void.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;It’s somewhat of a relief to be done for now, but there’s also an angst welling within me. Because I know what is still left undone. I know the flaws, the things that should be working but are not, some that were not caught until too late, other’s due to my own disastrous oversights, miscalculations, certainty gone awry.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Yet then I am reminded by others of the majority that works as advertised, all that runs miraculously right out of the box, and all the feedback and reviews of others; the big thumbs up. The buzz is electric. &lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;I’m proud of what is in there, bugs and all. Still, I relish the opportunity to dive back in and wrench it all apart, adjusting, tweaking, transfiguring. Fortunately, it’s not the final word. It is, after all, only a preview, a slice in time of the development cycle, primed and packaged for the PDC.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Language Integrated Query, you’ll see what it’s all about in two weeks time. You’ll get the disk and install it for yourself in the comfort of your own home. You’ll run the samples and see them fly. You’ll dig deeper and find the flaws. I’m okay with that. That’s why we are handing it out now. We want to hear from you. &lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;If you are at the PDC you can even stop by and tell me what you think. I’ll be bouncing back and forth between the language and data track lounges. Though, maybe not literally unless there’s a big trampoline.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Matt&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=457641" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mattwar/archive/tags/PDC/default.aspx">PDC</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/LINQ/default.aspx">LINQ</category></item><item><title>C# 3.0 Revealed?</title><link>http://blogs.msdn.com/mattwar/archive/2005/06/13/c-3-0-revealed.aspx</link><pubDate>Mon, 13 Jun 2005 21:49:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:428587</guid><dc:creator>mattwar</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/mattwar/comments/428587.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mattwar/commentrss.aspx?PostID=428587</wfw:commentRss><description>&lt;P&gt;&lt;A href="http://msdn.microsoft.com/events/pdc/agenda/default.aspx" mce_href="http://msdn.microsoft.com/events/pdc/agenda/default.aspx"&gt;Professional Developers Conference&amp;nbsp;&lt;/A&gt;&amp;nbsp;PDC September, 2005&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=428587" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mattwar/archive/tags/PDC/default.aspx">PDC</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/LINQ/default.aspx">LINQ</category></item></channel></rss>