<?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 Visual Basic Team : Timothy Ng</title><link>http://blogs.msdn.com/vbteam/archive/tags/Timothy+Ng/default.aspx</link><description>Tags: Timothy Ng</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Where is the VB Team going to be over the next few months? (Lisa Feigenbaum)</title><link>http://blogs.msdn.com/vbteam/archive/2008/09/28/where-is-the-vb-team-going-to-be-over-the-next-few-months-lisa-feigenbaum.aspx</link><pubDate>Mon, 29 Sep 2008 01:26:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8968253</guid><dc:creator>VBTeam</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/vbteam/comments/8968253.aspx</comments><wfw:commentRss>http://blogs.msdn.com/vbteam/commentrss.aspx?PostID=8968253</wfw:commentRss><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Calibri size=3&gt;We have quite a few trips coming up over the next couple months, and we want to connect with you while we’re on the road. Here is our plan. Let us know where we can find you. ;-)&lt;/FONT&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;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;&lt;o:p&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;B&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;October 6-7, 2008&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;STRONG&gt;&lt;SPAN class=Head id=dnn_ctr393_dnnTITLE_lblTitle&gt;Software Development Conference 2008&lt;/SPAN&gt;:&lt;/STRONG&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face=Calibri size=3&gt;&lt;A href="http://www.sdc.nl/" mce_href="http://www.sdc.nl/"&gt;http://www.sdc.nl/&lt;/A&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Calibri size=3&gt;Beth Massi&lt;/FONT&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;&lt;B&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;October 8-10, 2008&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B&gt;TechEd Hong Kong:&lt;/B&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;A href="http://www.microsoft.com/hk/technet/teched2008/" mce_href="http://www.microsoft.com/hk/technet/teched2008/"&gt;&lt;FONT face=Calibri size=3&gt;http://www.microsoft.com/hk/technet/teched2008/&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt; &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Calibri size=3&gt;Karen Liu&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;B&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;October 21-23, 2008&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B&gt;OOPSLA:&lt;/B&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;A href="http://www.oopsla.org/oopsla2008/" mce_href="http://www.oopsla.org/oopsla2008/"&gt;&lt;FONT face=Calibri size=3&gt;http://www.oopsla.org/oopsla2008/&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Calibri size=3&gt;Dustin Campbell&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;B&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;October 27-30, 2008&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B&gt;Professional Developers Conference:&lt;/B&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;A href="http://www.microsoftpdc.com/" mce_href="http://www.microsoftpdc.com/"&gt;&lt;FONT face=Calibri size=3&gt;http://www.microsoftpdc.com/&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Calibri size=3&gt;Paul Vick&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Calibri size=3&gt;Dustin Campbell&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Calibri size=3&gt;Lisa Feigenbaum&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Calibri size=3&gt;Alex Turner&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;B&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;November 8-9, 2008&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B&gt;Silicon Valley Code Camp:&lt;/B&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;A href="http://www.siliconvalley-codecamp.com/" mce_href="http://www.siliconvalley-codecamp.com/"&gt;&lt;FONT face=Calibri size=3&gt;http://www.siliconvalley-codecamp.com&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt; &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Calibri size=3&gt;Tim Ng&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Calibri size=3&gt;Beth Massi&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;B&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;November 10-13, 2008&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B&gt;DevConnections:&lt;/B&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;A href="http://www.devconnections.com/shows/FALL2008VS/default.asp?c=1&amp;amp;s=121" mce_href="http://www.devconnections.com/shows/FALL2008VS/default.asp?c=1&amp;amp;s=121"&gt;&lt;FONT face=Calibri size=3&gt;http://www.devconnections.com/shows/FALL2008VS/default.asp?c=1&amp;amp;s=121&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Calibri size=3&gt;Lucian Wischik&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Calibri size=3&gt;Jay Schmelzer&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Calibri size=3&gt;Christin Boyd&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Calibri size=3&gt;John Stallo&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;B&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;November 10-14, 2008&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;B&gt;&lt;FONT face=Calibri size=3&gt;TechEd EMEA: &lt;/FONT&gt;&lt;/B&gt;&lt;A href="http://www.microsoft.com/emea/teched2008/" mce_href="http://www.microsoft.com/emea/teched2008/"&gt;&lt;FONT face=Calibri size=3&gt;http://www.microsoft.com/emea/teched2008/&lt;/FONT&gt;&lt;/A&gt;&lt;B&gt;&lt;FONT face=Calibri size=3&gt; &lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Calibri size=3&gt;Jonathan Aneja&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Calibri size=3&gt;Lisa Feigenbaum&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Calibri size=3&gt;Karen Liu&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Calibri size=3&gt;Paul Yuknewicz&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Calibri size=3&gt;John Durant&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&lt;STRONG&gt;November 17-20, 2008&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&lt;STRONG&gt;Spain user group tour, Barcelona to Madrid&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;Jonathan Aneja&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;Lisa Feigenbaum&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&lt;/FONT&gt;&lt;/o:p&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&lt;STRONG&gt;November 19-20, 2008&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&lt;STRONG&gt;TechSummit Berlin: &lt;/STRONG&gt;&lt;SPAN style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;A href="http://www.technical-summit.de/"&gt;&lt;FONT color=#0000ff&gt;http://www.technical-summit.de&lt;/FONT&gt;&lt;/A&gt; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;Paul Yuknewicz&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;John Durant&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;B&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;B&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;December 1-2, 2008&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B&gt;DevTeach Montreal:&lt;/B&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;A href="http://www.devteach.com/" mce_href="http://www.devteach.com/"&gt;&lt;FONT face=Calibri size=3&gt;http://www.devteach.com/&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Calibri size=3&gt;Beth Massi&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;B&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;January 7-9, 2009&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B&gt;Code Mash:&lt;/B&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;A href="http://www.codemash.org/" mce_href="http://www.codemash.org/"&gt;&lt;FONT face=Calibri size=3&gt;http://www.codemash.org/&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt; &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Calibri size=3&gt;Dustin Campbell&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Calibri size=3&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Calibri size=3&gt;Finally, you can also find us at the .Net Developers Association meeting in Bellevue, Washington the fourth Monday night each month. &lt;A href="http://netda.net/" mce_href="http://netda.net/"&gt;http://netda.net&lt;/A&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8968253" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/vbteam/archive/tags/Paul+Vick/default.aspx">Paul Vick</category><category domain="http://blogs.msdn.com/vbteam/archive/tags/Lisa+Feigenbaum/default.aspx">Lisa Feigenbaum</category><category domain="http://blogs.msdn.com/vbteam/archive/tags/Jonathan+Aneja/default.aspx">Jonathan Aneja</category><category domain="http://blogs.msdn.com/vbteam/archive/tags/Beth+Massi/default.aspx">Beth Massi</category><category domain="http://blogs.msdn.com/vbteam/archive/tags/Timothy+Ng/default.aspx">Timothy Ng</category><category domain="http://blogs.msdn.com/vbteam/archive/tags/TechEd2008/default.aspx">TechEd2008</category><category domain="http://blogs.msdn.com/vbteam/archive/tags/Karen+Liu/default.aspx">Karen Liu</category></item><item><title>LINQ to SQL (and LINQ to Entities) performance improvements (Tim Ng)</title><link>http://blogs.msdn.com/vbteam/archive/2008/03/28/linq-to-sql-and-linq-to-entities-performance-improvements-tim-ng.aspx</link><pubDate>Fri, 28 Mar 2008 18:58:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8341966</guid><dc:creator>VBTeam</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/vbteam/comments/8341966.aspx</comments><wfw:commentRss>http://blogs.msdn.com/vbteam/commentrss.aspx?PostID=8341966</wfw:commentRss><description>&lt;P&gt;Over the last few months, the VB and Data Programmability teams were working on fixing a performance problem with LINQ to SQL (which also manifested in LINQ to Entities). The issue was that LINQ to SQL was generating sub optimal T-SQL queries when the VB LINQ queries included filters over nullable columns.&lt;/P&gt;
&lt;P&gt;For example, consider the following query:&lt;/P&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;Dim&lt;/SPAN&gt; q = &lt;FONT color=#0000ff&gt;From&lt;/FONT&gt; o &lt;SPAN class=kwrd&gt;In&lt;/SPAN&gt; db.Orders &lt;FONT color=#0000ff&gt;Where&lt;/FONT&gt; o.EmployeeID = 123 &lt;SPAN class=kwrd&gt;Select&lt;/SPAN&gt; o.CustomerID &lt;/PRE&gt;
&lt;P&gt;In this scenario, the Orders.EmployeeID field is a nullable field (Integer?). In VB, the logical operators (&amp;lt;. &amp;lt;=, =, etc) are considered "three-value" operators, and thus, the result of the equality comparison is a “Boolean?” however, the LINQ operators expect the predict to return “Boolean” and not “Boolean?” therefore, VB must convert the “Boolean?” to a “Boolean” using the Coalesce operator. (For more details, please see my blog post on &lt;A href="http://blogs.msdn.com/timng/archive/2008/03/24/vb-expression-trees-coalesce-operator.aspx" mce_href="http://blogs.msdn.com/timng/archive/2008/03/24/vb-expression-trees-coalesce-operator.aspx"&gt;Expressions trees and Coalesce&lt;/A&gt; ).&lt;/P&gt;
&lt;P&gt;Although LINQ to SQL could optimized out the Coalesce operator, in VS 2008 RTM it converted from a predicate logic to value logic (and vice versa) which in some cases blows the applicable index on the column.&lt;/P&gt;
&lt;P&gt;Here's an example for the SQL that is generated in VS 2008 RTM:&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;SELECT [t0].[CustomerID] &lt;BR&gt;FROM [dbo].[Orders] AS [t0] &lt;BR&gt;WHERE (COALESCE( &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (CASE &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WHEN [t0].[EmployeeID] = @p0 THEN 1 &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WHEN NOT ([t0].[EmployeeID] = @p0) THEN 0 &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ELSE NULL &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; END),@p1)) = 1 &lt;BR&gt;-- @p0: Input Int (Size = 0; Prec = 0; Scale = 0) [123] &lt;BR&gt;-- @p1: Input Int (Size = 0; Prec = 0; Scale = 0) [0]&lt;/P&gt;
&lt;H2&gt;&lt;/H2&gt;
&lt;H2&gt;&lt;/H2&gt;
&lt;H3&gt;The Good News&lt;/H3&gt;
&lt;P&gt;The good news is that the LINQ to SQL team has&amp;nbsp;a fix to&amp;nbsp;their code generation to recognize this pattern, and now they emit the SQL code that you would have expected to emit:&lt;/P&gt;
&lt;P&gt;SELECT [t0].[CustomerID] &lt;BR&gt;FROM [dbo].[Orders] AS [t0] &lt;BR&gt;WHERE [t0].[EmployeeID] = @p0 &lt;BR&gt;-- @p0: Input Int (Size = 0; Prec = 0; Scale = 0) [123]&lt;/P&gt;
&lt;P&gt;In other words, LINQ to SQL (and LINQ to Entities - we made the same fix there) is now smart enough to pass three-value logic from VB to SQL.&lt;/P&gt;
&lt;P&gt;In this particular case, both VB and SQL employs three-value boolean logic, but the intermediate layer (the LINQ operators), employed two-value boolean logic, and the translation between the layers was "lost", which resulted in the non-optimized code that we generated in VS2008 RTM.&amp;nbsp;Look forward to this in an update coming later this year.&lt;/P&gt;
&lt;STYLE type=text/css&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/STYLE&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8341966" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/vbteam/archive/tags/LINQ_2F00_VB9/default.aspx">LINQ/VB9</category><category domain="http://blogs.msdn.com/vbteam/archive/tags/Timothy+Ng/default.aspx">Timothy Ng</category></item><item><title>VB expression trees - string comparisons</title><link>http://blogs.msdn.com/vbteam/archive/2007/09/18/vb-expression-trees-string-comparisons.aspx</link><pubDate>Wed, 19 Sep 2007 09:14:12 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4992944</guid><dc:creator>VBTeam</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/vbteam/comments/4992944.aspx</comments><wfw:commentRss>http://blogs.msdn.com/vbteam/commentrss.aspx?PostID=4992944</wfw:commentRss><description>&lt;p&gt;Hey there!&lt;/p&gt; &lt;p&gt;Last time, I talked a little bit about expression trees and what they are useful for. Expression trees are really interesting to those who want to write LINQ providers and have the ability to reason about the lambda expressions coming into their LINQ provider. However, in general, anyone that want's to reason about a lambda expression should be interested in expression trees.&lt;/p&gt; &lt;p&gt;Today, I'm going to write particularly to those who are implementing code that reads expression trees. Even if you don't plan to do that, I hope you follow along because this stuff is interesting to know and understand regardless :)&lt;/p&gt; &lt;p&gt;For this post, I wanted to discuss the comparison of strings and their representation in expression trees. Jonathan (our PM) and I were working through a LINQ provider sample, and we thought that this code would be useful to share with you.&lt;/p&gt; &lt;p&gt;In Visual Basic, it's possible to cause the = operator to do either case sensitive or case insensitive string comparison, via the &lt;strong&gt;option&amp;nbsp;compare&lt;/strong&gt; configuration.&lt;/p&gt; &lt;p&gt;In order to implement these semantics, the Visual Basic compiler emits a call to Microsoft.VisualBasic.CompilerServices.Operators.CompareString in the Visual Basic runtime. This method takes 3 arguments; the two operands, and a flag indicating the comparison type.&lt;/p&gt; &lt;p&gt;When the Visual Basic compiler generates an expression tree for a string equality operator, we decided to encode a call expression to the CompareString method in order to preserve the correct string comparison semantics. This is because by default, the Equal node in the expression tree API assumes case sensitive comparisons. Furthermore, the Equal node doesn't take into account special VB semantics around string comparisons and the Nothing literal.&lt;/p&gt; &lt;p&gt;This means that if you are writing a visitor over the expression trees generated by the VB compiler, you should expect to see a binary operator for &amp;lt;, &amp;lt;=, =, &amp;gt;=, or &amp;gt;, where the left hand side is a CompareString method and the right hand side is 0. When you see this, you should unpack the arguments in the CompareString method and apply the right string semantics based on the 3rd argument to CompareString.&lt;/p&gt; &lt;p&gt;However, if your provider doesn't care about string comparison semantics (LINQ to SQL, for example, doesn't care), then you can use the following code to transform the binary operator for the method call to a binary operator for the method call arguments, ignoring the string comparison semantics.&lt;/p&gt; &lt;p&gt;Call this method in your visitor for binary expressions, and it will convert it appropriately for you. You can then run your visitor over the node returned by this method, and handle string comparison as a binary operator, but you lose the case sensitivity of the comparison.&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;Friend&lt;/span&gt; &lt;span class="kwrd"&gt;Shared&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt; ConvertVBStringCompare(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; exp &lt;span class="kwrd"&gt;As&lt;/span&gt; BinaryExpression) &lt;span class="kwrd"&gt;As&lt;/span&gt; BinaryExpression
    &lt;span class="kwrd"&gt;If&lt;/span&gt; exp.Left.NodeType = ExpressionType.&lt;span class="kwrd"&gt;Call&lt;/span&gt; &lt;span class="kwrd"&gt;Then&lt;/span&gt;
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; compareStringCall = &lt;span class="kwrd"&gt;CType&lt;/span&gt;(exp.Left, MethodCallExpression)
        &lt;span class="kwrd"&gt;If&lt;/span&gt; compareStringCall.Method.DeclaringType.FullName = &lt;span class="str"&gt;"Microsoft.VisualBasic.CompilerServices.Operators"&lt;/span&gt; _
            &lt;span class="kwrd"&gt;AndAlso&lt;/span&gt; compareStringCall.Method.Name = &lt;span class="str"&gt;"CompareString"&lt;/span&gt; &lt;span class="kwrd"&gt;Then&lt;/span&gt;
            &lt;span class="kwrd"&gt;Dim&lt;/span&gt; arg1 = compareStringCall.Arguments(0)
            &lt;span class="kwrd"&gt;Dim&lt;/span&gt; arg2 = compareStringCall.Arguments(1)

            &lt;span class="kwrd"&gt;Select&lt;/span&gt; &lt;span class="kwrd"&gt;Case&lt;/span&gt; exp.NodeType
                &lt;span class="kwrd"&gt;Case&lt;/span&gt; ExpressionType.LessThan
                    &lt;span class="kwrd"&gt;Return&lt;/span&gt; Expression.LessThan(arg1, arg2)
                &lt;span class="kwrd"&gt;Case&lt;/span&gt; ExpressionType.LessThanOrEqual
                    &lt;span class="kwrd"&gt;Return&lt;/span&gt; Expression.GreaterThan(arg1, arg2)
                &lt;span class="kwrd"&gt;Case&lt;/span&gt; ExpressionType.GreaterThan
                    &lt;span class="kwrd"&gt;Return&lt;/span&gt; Expression.GreaterThan(arg1, arg2)
                &lt;span class="kwrd"&gt;Case&lt;/span&gt; ExpressionType.GreaterThanOrEqual
                    &lt;span class="kwrd"&gt;Return&lt;/span&gt; Expression.GreaterThanOrEqual(arg1, arg2)
                &lt;span class="kwrd"&gt;Case&lt;/span&gt; &lt;span class="kwrd"&gt;Else&lt;/span&gt;
                    &lt;span class="kwrd"&gt;Return&lt;/span&gt; Expression.Equal(arg1, arg2)
            &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Select&lt;/span&gt;
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
    &lt;span class="kwrd"&gt;Return&lt;/span&gt; exp
&lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;Here's an example of how you can use this. This is a really trivial visitor that doesn't do anything useful, but I just wanted to show how you could use the method defined above.&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;Sub&lt;/span&gt; VisitBinary(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; exp &lt;span class="kwrd"&gt;As&lt;/span&gt; BinaryExpression)
    exp = ConvertVBStringCompare(exp)
    Visit(exp.Left)
    Visit(exp.Right)
&lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; &lt;/pre&gt;
&lt;p&gt;I hope that this helps!&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Tim&lt;/p&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4992944" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/vbteam/archive/tags/LINQ_2F00_VB9/default.aspx">LINQ/VB9</category><category domain="http://blogs.msdn.com/vbteam/archive/tags/Timothy+Ng/default.aspx">Timothy Ng</category></item><item><title>Lambda Expressions and Expression Trees</title><link>http://blogs.msdn.com/vbteam/archive/2007/09/11/lambda-expressions-and-expression-trees.aspx</link><pubDate>Wed, 12 Sep 2007 05:10:30 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4874107</guid><dc:creator>VBTeam</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/vbteam/comments/4874107.aspx</comments><wfw:commentRss>http://blogs.msdn.com/vbteam/commentrss.aspx?PostID=4874107</wfw:commentRss><description>&lt;p&gt;Hi there!&lt;/p&gt; &lt;p&gt;My name is Tim, and I'm the dev lead for the VB compiler team. Recently Amanda convinced me to blog on the VB team blog rather then &lt;a href="http://blogs.msdn.com/timng"&gt;my own blog&lt;/a&gt; for a variety of reasons, and so here I am. My current plan is that I'll post VB related postings here, and more compiler implementation/technology/fun facts on my own blog (ie, things that don't relate to the&amp;nbsp;VB language/features).&lt;/p&gt; &lt;p&gt;Recently my article on &lt;a href="http://msdn.microsoft.com/msdnmag/issues/07/09/BasicInstincts/"&gt;lambda expressions&lt;/a&gt; got published on MSDN magazine. For this blog post, I'm going to expand on some of the ideas in that article, so feel free to check out the article if some of the ideas here don't make sense yet.&lt;/p&gt; &lt;p&gt;Lambda expressions are really cool not only because of the reasons stated in the article, but also because it's possible to capture the contents of a lambda expression in a readable form and treat it as data rather than executable code.&lt;/p&gt; &lt;p&gt;For example, the following line of code turns a lambda expression into a callable delegate:&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;Dim&lt;/span&gt; f &lt;span class="kwrd"&gt;As&lt;/span&gt; Func(Of &lt;span class="kwrd"&gt;Integer&lt;/span&gt;, &lt;span class="kwrd"&gt;Integer&lt;/span&gt;) = &lt;span class="kwrd"&gt;function&lt;/span&gt;(x) x * 2
&lt;span class="kwrd"&gt;Dim&lt;/span&gt; r = f(10)&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;In this code sample, the first line creates a lambda expression and does the magic to assign it to&amp;nbsp;a callable delegate&amp;nbsp;f, and the second line invokes f and returns 20.&lt;/p&gt;
&lt;p&gt;This is all&amp;nbsp;cool, and I hope my article highlights some of the reasons why I think this is cool. What's even more cool is that you can&amp;nbsp;actually assign a lambda expression&amp;nbsp;into a special&amp;nbsp;variable type and the compiler does some more magic for you:&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;Dim&lt;/span&gt; e &lt;span class="kwrd"&gt;As&lt;/span&gt; Expression(Of Func(Of &lt;span class="kwrd"&gt;Integer&lt;/span&gt;, &lt;span class="kwrd"&gt;Integer&lt;/span&gt;)) = &lt;span class="kwrd"&gt;function&lt;/span&gt;(x) x * 2&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;In this code sample, e is not a callable delegate. Rather, it's an &lt;strong&gt;expression tree&lt;/strong&gt;. An expression tree is a data representation of the lambda expression in a form that is easy for you to read and reason about the lambda expression in.&lt;/p&gt;
&lt;p&gt;If you look through the value of e in the debugger, you'll see that you can easily determine that the expression was a multiplication operation of variable called x of type integer with a constant integer 2.&lt;/p&gt;
&lt;p&gt;By default, query operators that extend IEnumerable take lambda expressions. Query operators that extend IQueryable take expression trees. Therefore, when you issue a query over a type that is queryable, the compiler will generate an expression tree rather than a lambda expression.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/msdnmag/issues/07/08/BasicInstincts/"&gt;Scott&lt;/a&gt;, one of the developers on my team, has written an excellent article as well on some of these ideas. He has a great diagram there showing the expression tree representation of a few lambda expressions.&lt;/p&gt;
&lt;p&gt;What can you do with expression trees?&lt;/p&gt;
&lt;p&gt;In general, you can do 2 things:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Reason about the data in the expression tree, and do custom processing over it. You can also convert the data in the expression tree into another domain (such as XML). 
&lt;li&gt;Use the .Compile() method to turn the expression tree into a delegate so that you can execute it. 
&lt;li&gt;Build queries with dynamic conditions: see &lt;a href="http://blogs.msdn.com/vbteam/archive/2007/08/29/implementing-dynamic-searching-using-linq.aspx"&gt;Jonathan's&lt;/a&gt; (our PM) excellent post. He has a great example of how you can manipulate the expression trees and build custom conditions in your lambda expressions.&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;Item 2 is interesting, because it means that you can write a lambda expression into an expression tree, reason about it,&amp;nbsp;etc, and then turn it into a callable delegate.&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;Dim&lt;/span&gt; e &lt;span class="kwrd"&gt;As&lt;/span&gt; Expression(Of Func(Of &lt;span class="kwrd"&gt;Integer&lt;/span&gt;, &lt;span class="kwrd"&gt;Integer&lt;/span&gt;)) = &lt;span class="kwrd"&gt;function&lt;/span&gt;(x) x * 2
&lt;span class="kwrd"&gt;Dim&lt;/span&gt; f = e.Compile
&lt;span class="kwrd"&gt;Dim&lt;/span&gt; r = f(10)&lt;/pre&gt;
&lt;p&gt;In this example, the value of r is 20, just like the previous example where we assigned the lambda directly to a delegate type. 
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;/p&gt;
&lt;p&gt;Why is this interesting?&lt;/p&gt;
&lt;p&gt;Without expression trees, its impossible to describe expressions in a descriptive format; the only description of them is IL, which is too low level to re-create the user's intent for the expression. Rather, expression trees provide a high level tree representation of an expression, so that you can easily understand the user's intent for the expression.&lt;/p&gt;
&lt;p&gt;Here are some uses of expression trees that may be interesting:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Reason about expressions, then convert them to delegates and call them. 
&lt;li&gt;Convert expressions into SQL so that they can be executed by a server (this is what LINQ to SQL does). 
&lt;li&gt;Convert expressions into XML and write them to disk. 
&lt;li&gt;Convert expressions into a custom format to send over a network protocol to a server that can then rebuild the expression tree from the format, recreate the expression, and reason about it and/or execute it.&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;Over the next several posts, I'm going to blog specifically about the expression trees that the VB compiler generates, and some differences between C# trees and VB trees in order to maintain VB semantics. I will also provide tips on things you can do to be sure that any library that you write that consumes expression trees will provide the best experience for VB developers.&lt;/p&gt;
&lt;p&gt;Tim&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4874107" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/vbteam/archive/tags/LINQ_2F00_VB9/default.aspx">LINQ/VB9</category><category domain="http://blogs.msdn.com/vbteam/archive/tags/IQueryable/default.aspx">IQueryable</category><category domain="http://blogs.msdn.com/vbteam/archive/tags/Timothy+Ng/default.aspx">Timothy Ng</category></item></channel></rss>