<?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 : VB_Express</title><link>http://blogs.msdn.com/vbteam/archive/tags/VB_5F00_Express/default.aspx</link><description>Tags: VB_Express</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Two free e-books available till April 22th to celebrate MS Press’s 25th b-day (Daniel Walzenbach)</title><link>http://blogs.msdn.com/vbteam/archive/2009/04/16/two-free-e-books-available-till-april-22th-to-celebrate-ms-press-s-25th-b-day-daniel-walzenbach.aspx</link><pubDate>Fri, 17 Apr 2009 00:30:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9553515</guid><dc:creator>VBTeam</dc:creator><slash:comments>13</slash:comments><comments>http://blogs.msdn.com/vbteam/comments/9553515.aspx</comments><wfw:commentRss>http://blogs.msdn.com/vbteam/commentrss.aspx?PostID=9553515</wfw:commentRss><description>&lt;P&gt;2009 is the 25th anniversary of &lt;A href="http://www.microsoft.com/learning/books/default.mspx" target=_blank mce_href="http://www.microsoft.com/learning/books/default.mspx"&gt;Microsoft Press&lt;/A&gt;! To celebrate their b-bay they’re giving away two free e-books, namely &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;I&gt;&lt;A title="Windows Small Business Server 2008 Administrator's Companion" href="http://csna01.libredigital.com/?urws8un4p7" target=_blank mce_href="http://csna01.libredigital.com/?urws8un4p7"&gt;Windows Small Business Server 2008 Administrator's Companion&lt;/A&gt;&lt;/I&gt; by Charlie Russel and Sharon Crawford (27 chapters, 3 appendices, 712 pages) &lt;/LI&gt;
&lt;LI&gt;&lt;I&gt;&lt;A title="Microsoft Visual Basic 2008 Express Edition: Build a Program Now!" href="http://co1piltwb.partners.extranet.microsoft.com/mcoeredir/mcoeredirect.aspx?linkId=11673269&amp;amp;s1=90556d06-f342-e2d5-22ea-905ac30c5746" target=_blank mce_href="http://co1piltwb.partners.extranet.microsoft.com/mcoeredir/mcoeredirect.aspx?linkId=11673269&amp;amp;s1=90556d06-f342-e2d5-22ea-905ac30c5746"&gt;Microsoft Visual Basic 2008 Express Edition: Build a Program Now!&lt;/A&gt;&lt;/I&gt; by Patrice Pelland (9 chapters, Glossary, 254 pages) &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;A title="Windows Small Business Server 2008 Administrator's Companion" href="http://csna01.libredigital.com/?urws8un4p7" target=_blank mce_href="http://csna01.libredigital.com/?urws8un4p7"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="Windows Small Business Server 2008 Administrator's Companion" border=0 alt=clip_image002 src="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/TwofreeebooksavailabletillApril22thtocel_139FE/clip_image002_25ad6938-d9eb-49da-aad8-9f1e838e443d.jpg" width=163 height=198 mce_src="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/TwofreeebooksavailabletillApril22thtocel_139FE/clip_image002_25ad6938-d9eb-49da-aad8-9f1e838e443d.jpg"&gt;&lt;/A&gt; &lt;A title="Microsoft Visual Basic 2008 Express Edition: Build a Program Now!" href="http://co1piltwb.partners.extranet.microsoft.com/mcoeredir/mcoeredirect.aspx?linkId=11673269&amp;amp;s1=90556d06-f342-e2d5-22ea-905ac30c5746" target=_blank mce_href="http://co1piltwb.partners.extranet.microsoft.com/mcoeredir/mcoeredirect.aspx?linkId=11673269&amp;amp;s1=90556d06-f342-e2d5-22ea-905ac30c5746"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="Microsoft Visual Basic 2008 Express Edition: Build a Program Now!" border=0 alt=clip_image003 src="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/TwofreeebooksavailabletillApril22thtocel_139FE/clip_image003_8bf8f2e2-2c31-4cbb-8edb-1c078f65777f.jpg" width=244 height=198 mce_src="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/TwofreeebooksavailabletillApril22thtocel_139FE/clip_image003_8bf8f2e2-2c31-4cbb-8edb-1c078f65777f.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Before opening one of the links make sure that you disable your Pop-Up blocker as the window containing the book will be opened in a new window. Additionally, when the new window gets opened give it some time to show the content as the VB book is roughly 8MB and the Windows Small Business Server book is around 24MB. &lt;/P&gt;
&lt;P&gt;To download the book click "Page &amp;gt;&amp;gt; Save As..." and rename the download in the Save window. &lt;/P&gt;
&lt;P&gt;&lt;IMG alt="" src="http://blogcasts.de/dwalzen/blog/VB2008Express_1.png"&gt;&lt;BR&gt;&lt;BR&gt;&lt;IMG alt="" src="http://blogcasts.de/dwalzen/blog/VB2008Express_2.png"&gt; &lt;/P&gt;
&lt;P&gt;Get them as soon as the offer lasts (April 22nd) :-)&lt;/P&gt;
&lt;P&gt;Daniel&lt;/P&gt;
&lt;P&gt;Edited April 22, 2009: Included the last section on "How to download the ebooks". &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9553515" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/vbteam/archive/tags/VB_5F00_Express/default.aspx">VB_Express</category><category domain="http://blogs.msdn.com/vbteam/archive/tags/VB2008/default.aspx">VB2008</category><category domain="http://blogs.msdn.com/vbteam/archive/tags/Daniel+Walzenbach/default.aspx">Daniel Walzenbach</category></item><item><title>LINQ for the Web Using VB (By Paul Yuknewicz)</title><link>http://blogs.msdn.com/vbteam/archive/2007/12/27/linq-for-the-web-using-vb-by-paul-yuknewicz.aspx</link><pubDate>Fri, 28 Dec 2007 06:55:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6880595</guid><dc:creator>VBTeam</dc:creator><slash:comments>7</slash:comments><comments>http://blogs.msdn.com/vbteam/comments/6880595.aspx</comments><wfw:commentRss>http://blogs.msdn.com/vbteam/commentrss.aspx?PostID=6880595</wfw:commentRss><description>&lt;P&gt;Happy holidays!&amp;nbsp; It's been a long time since I've written a post, so I figure I can bring in the new year answering some great questions&amp;nbsp;submitted by&amp;nbsp;you.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Just this week someone gave me this feedback: &lt;BR&gt;&lt;EM&gt;&lt;STRONG&gt;"I am having a difficult time finding information to help me adapt to LINQ in my webforms. I am hoping that someone from the team can offer a direction. "&lt;/STRONG&gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;You bet!&amp;nbsp; We have a lot of attention to LINQ and Forms-over-data in VB in our &lt;A href="http://msdn2.microsoft.com/en-us/vbasic/ms789086.aspx" mce_href="http://msdn2.microsoft.com/en-us/vbasic/ms789086.aspx"&gt;learning content&lt;/A&gt;, but we're lacking content with attention to LINQ and Web-based Forms-over-data.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;There are a number of great innovations in the Web space that make it easy to leverage LINQ's querying capabilities and mesh that with the richness and flexibility of Web-based UI.&amp;nbsp; &lt;EM&gt;It's easy.&lt;/EM&gt;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;There are a few concepts you should learn or know about to get started:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;LinqDataSource control&lt;/STRONG&gt; -- allows you to use a LINQ query as a data source in Web-based data binding &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;LinqDataSource.Selecting event &lt;/STRONG&gt;- allows you to set any LINQ custom query (including anonymous queries) as the data source.&amp;nbsp; Simply pick LinqDataSource and Selecting events from the VB editor dropdowns, and set e.Result = &amp;lt;your LINQ query&amp;gt; in the event handler code &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;OR Designer and Linq to SQL&lt;/STRONG&gt; - if you're connecting directly to a SQL database with your LINQ query (instead of objects, xml, etc), this is an easy way to create queries and what we call DataContext objects.&amp;nbsp; "OR" is short for Object-Relational mapping, i.e. mapping relational database data to .NET objects &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;ASP.NET data binding expressions&lt;/STRONG&gt; - allows you to evaluate&amp;nbsp;ASP-style &amp;lt;%# Eval("YOURFIELD") %&amp;gt; expressions from data source fields or properties in simple controls or lists of controls &lt;/LI&gt;&lt;/UL&gt;
&lt;H3&gt;Creating a Simple Web Form with LINQ To SQL&lt;/H3&gt;
&lt;P&gt;The first post will cover the simplest Web form that will demonstrate this end to end span of concepts.&amp;nbsp; I'll then take input from you to add features and expand on this sample in future posts.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Here's a sample of the initial desired Web form output - a very simple Employee list report for an HR application - admittedly it's bare bones and in need of UI design love:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;&lt;FONT color=#8080c0&gt;&lt;IMG alt="Photo Number XXX" src="http://localhost:60052/PLACEHOLDER.jpg" mce_src="http://localhost:60052/PLACEHOLDER.jpg"&gt; &lt;BR&gt;EmployeeID: 2 &lt;BR&gt;Andrew Fuller &lt;BR&gt;Andrew received his BTS commercial in 1974 and a Ph.D. in international marketing from the University of Dallas in 1981. He is fluent in French and Italian and reads German. He joined the company as a sales representative, was promoted to sales manager in January 1992 and to vice president of sales in March 1993. Andrew is a member of the Sales Management Roundtable, the Seattle Chamber of Commerce, and the Pacific Rim Importers Association.&lt;/FONT&gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&lt;FONT color=#8080c0&gt;&lt;IMG alt="Photo Number XXX" src="http://localhost:60052/PLACEHOLDER.jpg" mce_src="http://localhost:60052/PLACEHOLDER.jpg"&gt; &lt;BR&gt;EmployeeID: 1 &lt;BR&gt;Nancy Davolio &lt;BR&gt;Education includes a BA in psychology from Colorado State University in 1970. She also completed "The Art of the Cold Call." Nancy is a member of Toastmasters International.&lt;/FONT&gt;&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;If you are pretty familiar with Visual Studio I expect this will take about 10-15 minutes to walk through on your own machine.&amp;nbsp; &lt;/P&gt;
&lt;H5&gt;Preparation&lt;/H5&gt;
&lt;P&gt;- make sure you have Visual Studio&amp;nbsp;2008 or Visual Web Developer 2008&amp;nbsp;Express installed.&amp;nbsp; Express Editions are &lt;A href="http://www.microsoft.com/express/download/default.aspx" mce_href="http://www.microsoft.com/express/download/default.aspx"&gt;available for download here&lt;/A&gt;. &lt;BR&gt;- make sure you have SQL Server 2005 Express installed and running.&amp;nbsp; It typically gets installed by default with VS or VS Express, however, you can also &lt;A href="http://www.microsoft.com/express/download/default.aspx" mce_href="http://www.microsoft.com/express/download/default.aspx"&gt;install it from here&lt;/A&gt;.&amp;nbsp; &lt;BR&gt;-if you don't have Northwind.mdf on your machine, download it from the attached files on this post.&amp;nbsp; &lt;BR&gt;&lt;/P&gt;
&lt;H5&gt;Adding Data to the Web Site&lt;/H5&gt;
&lt;P&gt;First we're going to add the database to our project and create necessary classes to use the database in LINQ (using Linq to SQL).&amp;nbsp; &lt;EM&gt;Note, you could choose to skip this step and create your own custom LINQ query to any other data source.&lt;/EM&gt;&amp;nbsp; &lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;create a new Web site on the local file system via File -&amp;gt; New Web Site ... -&amp;gt; ASP.NET Web Site &lt;/LI&gt;
&lt;LI&gt;add the Northwind database to your web site's App_Data folder 
&lt;OL&gt;
&lt;LI&gt;download Northwind.mdf file from this blog entry and save it to disk &lt;/LI&gt;
&lt;LI&gt;drag and drop this file into the App_Data folder in Solution Explorer &lt;BR&gt;&amp;nbsp;&lt;A href="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/LINQforWebDevelopersByPaulYuk_B656/1AddLocalDatabase_4.jpg" mce_href="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/LINQforWebDevelopersByPaulYuk_B656/1AddLocalDatabase_4.jpg"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=244 alt=1AddLocalDatabase src="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/LINQforWebDevelopersByPaulYuk_B656/1AddLocalDatabase_thumb_1.jpg" width=150 border=0 mce_src="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/LINQforWebDevelopersByPaulYuk_B656/1AddLocalDatabase_thumb_1.jpg"&gt;&lt;/A&gt; &lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;
&lt;LI&gt;Create LINQ to SQL classes for Northwind using the OR Designer.&amp;nbsp; Linq to SQL classes will be stored in a .dbml file and can be opened in the visual OR Designer.&amp;nbsp; 
&lt;OL&gt;
&lt;LI&gt;Right-click on the WebSite node in Solution Explorer, &lt;STRONG&gt;Add New Item -&amp;gt; Linq To SQL Classes&lt;/STRONG&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Rename&lt;/STRONG&gt; the file from "DataClasses.dbml" to "&lt;STRONG&gt;Northwind&lt;/STRONG&gt;DataClasses.dbml".&amp;nbsp; (This is important so classes can be found in code and in VS wizards). &lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/LINQforWebDevelopersByPaulYuk_B656/2AddLinqToSqlClasses_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/LINQforWebDevelopersByPaulYuk_B656/2AddLinqToSqlClasses_2.jpg"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=315 alt=2AddLinqToSqlClasses src="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/LINQforWebDevelopersByPaulYuk_B656/2AddLinqToSqlClasses_thumb.jpg" width=479 border=0 mce_src="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/LINQforWebDevelopersByPaulYuk_B656/2AddLinqToSqlClasses_thumb.jpg"&gt;&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;When prompted, click &lt;STRONG&gt;Yes&lt;/STRONG&gt; to add this file to the App_Code folder.&amp;nbsp; This is important b/c the Web sitfe needs to dynamically compile generated code created by the designer.&amp;nbsp; &lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/LINQforWebDevelopersByPaulYuk_B656/2B-AddLinqToSqlClasses_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/LINQforWebDevelopersByPaulYuk_B656/2B-AddLinqToSqlClasses_2.jpg"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=172 alt=2B-AddLinqToSqlClasses src="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/LINQforWebDevelopersByPaulYuk_B656/2B-AddLinqToSqlClasses_thumb.jpg" width=423 border=0 mce_src="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/LINQforWebDevelopersByPaulYuk_B656/2B-AddLinqToSqlClasses_thumb.jpg"&gt;&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;Double click NorthwindDataClasses.dbml to open it in the OR Designer. &lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;
&lt;LI&gt;Add Employee table objects to your Linq to SQL classes 
&lt;OL&gt;
&lt;LI&gt;Open Server Explorer (or Database Explorer in Express) &lt;/LI&gt;
&lt;LI&gt;Expand Northwnd.MDF -&amp;gt; Tables -&amp;gt; Employees &lt;/LI&gt;
&lt;LI&gt;Drag and Drop the &lt;STRONG&gt;Employees&lt;/STRONG&gt; table node from Server Explorer to the NorthwindDataClasses.dbml design surface&amp;nbsp; (NOTE: you could continue to add more Tables, or Stored Procedures, or customize the names/properties in the designer). &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Save All&lt;/STRONG&gt; files &lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/LINQforWebDevelopersByPaulYuk_B656/3AddingClassesToORDesigner_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/LINQforWebDevelopersByPaulYuk_B656/3AddingClassesToORDesigner_2.jpg"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=304 alt=3AddingClassesToORDesigner src="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/LINQforWebDevelopersByPaulYuk_B656/3AddingClassesToORDesigner_thumb.jpg" width=430 border=0 mce_src="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/LINQforWebDevelopersByPaulYuk_B656/3AddingClassesToORDesigner_thumb.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;H5&gt;Laying Out Form UI &amp;amp; DataSource Controls&lt;/H5&gt;
&lt;P&gt;Now that we've added the database to the Web site and created necessary LINQ to SQL classes, it's time to create some UI and wire up the data to the UI.&amp;nbsp; I won't do anything too fancy - just repeat data bound labels in a DataList (you could replace this with GridView, FormView or choose your favorite control).&amp;nbsp; &lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Double-click Default.aspx to open the page in the designer &lt;/LI&gt;
&lt;LI&gt;Drag n drop a DataList from the data tab of Toolbox to the Default.aspx design surface (or to the correct DIV area in mark up "Source" view) &lt;/LI&gt;
&lt;LI&gt;Drop n drop a LinqDataSource control from the data tab of the Toolbox to the Default.aspx design surface (or just below the DataList in "Source" view) &lt;BR&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;H5&gt;Wiring up the LinqDataSource to Underlying Data (LINQ to SQL - DataContext)&lt;/H5&gt;
&lt;P&gt;The LinqDataSource needs to be wired up to the underlying LINQ data.&amp;nbsp; In this case data is provided by any DataContext object&amp;nbsp; or query over an object of the NorthwindDataClasses type (a LINQ to SQL file).&amp;nbsp; The DataList then simply needs to use the LinqDataSource as the data source, and display data from bound fields using traditional Eval("") statements.&amp;nbsp; The designer will generate a set of defaults for you if you use the Smart Tags.&amp;nbsp; Let's give it a shot with defaults, and then we can fine tune it from there.&amp;nbsp; &lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Select the LinqDataSource control in the designer.&amp;nbsp; Expand the smart tag and click &lt;STRONG&gt;Configure Data Source...&lt;/STRONG&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/LINQforWebDevelopersByPaulYuk_B656/4LinqDataSource_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/LINQforWebDevelopersByPaulYuk_B656/4LinqDataSource_2.jpg"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=227 alt=4LinqDataSource src="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/LINQforWebDevelopersByPaulYuk_B656/4LinqDataSource_thumb.jpg" width=429 border=0 mce_src="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/LINQforWebDevelopersByPaulYuk_B656/4LinqDataSource_thumb.jpg"&gt;&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;A wizard pops up and should default to picking your &lt;STRONG&gt;NorthwindDataClasses&lt;/STRONG&gt; as the source.&amp;nbsp; (any other queryable sources you add will show up here).&amp;nbsp; Click Next.&amp;nbsp; &lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/LINQforWebDevelopersByPaulYuk_B656/4bLinqDataSourceWizardDataSource_4.jpg" mce_href="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/LINQforWebDevelopersByPaulYuk_B656/4bLinqDataSourceWizardDataSource_4.jpg"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=319 alt=4bLinqDataSourceWizardDataSource src="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/LINQforWebDevelopersByPaulYuk_B656/4bLinqDataSourceWizardDataSource_thumb_1.jpg" width=434 border=0 mce_src="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/LINQforWebDevelopersByPaulYuk_B656/4bLinqDataSourceWizardDataSource_thumb_1.jpg"&gt;&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;You can optionally pick any specific subset of columns/fields.&amp;nbsp; I just chose * for this example.&amp;nbsp; You could even configure a Where clause -- however I honestly think it's easier to do parameterized queries and other query operations in code.&amp;nbsp; I'll show that later ...&amp;nbsp; Click &lt;STRONG&gt;Finish&lt;/STRONG&gt;.&amp;nbsp; &lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/LINQforWebDevelopersByPaulYuk_B656/4cLinqDataSourceWizardChooseFields_4.jpg" mce_href="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/LINQforWebDevelopersByPaulYuk_B656/4cLinqDataSourceWizardChooseFields_4.jpg"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=317 alt=4cLinqDataSourceWizardChooseFields src="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/LINQforWebDevelopersByPaulYuk_B656/4cLinqDataSourceWizardChooseFields_thumb_1.jpg" width=431 border=0 mce_src="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/LINQforWebDevelopersByPaulYuk_B656/4cLinqDataSourceWizardChooseFields_thumb_1.jpg"&gt;&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;Optionally you can Enable Delete, Insert, and Update for the LinqDataSource using the Smart Tag.&amp;nbsp; &lt;EM&gt;&lt;STRONG&gt;TIP&lt;/STRONG&gt;: This is handy if you're going to build a read/write web form.&amp;nbsp; &lt;/EM&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/LINQforWebDevelopersByPaulYuk_B656/4dLinqDataSourceConfigureCRUD_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/LINQforWebDevelopersByPaulYuk_B656/4dLinqDataSourceConfigureCRUD_2.jpg"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=220 alt=4dLinqDataSourceConfigureCRUD src="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/LINQforWebDevelopersByPaulYuk_B656/4dLinqDataSourceConfigureCRUD_thumb.jpg" width=369 border=0 mce_src="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/LINQforWebDevelopersByPaulYuk_B656/4dLinqDataSourceConfigureCRUD_thumb.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Here is the resulting mark up for the LinqDataSource as seen in "Source" view.&amp;nbsp; Note how the ContextTypeName="NorthwindDataClassesDataContext" -- this matches the name of the type we created in the designer (the code gen appends "DataContext" to the end -- whew that's long!).&amp;nbsp; The TableName is set to the Table or Property we want to display -- Employees in this case.&amp;nbsp; You could use this pattern to bind to any DataContext type and class property within.&amp;nbsp; &lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;asp&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;:&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;LinqDataSource &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;ID&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="LinqDataSource1" &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;runat&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="server" &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;ContextTypeName&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="&lt;STRONG&gt;NorthwindDataClassesDataContext&lt;/STRONG&gt;"
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;TableName&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="&lt;STRONG&gt;Employees&lt;/STRONG&gt;"&amp;gt;
&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;asp&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;:&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;LinqDataSource&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;&lt;/BLOCKQUOTE&gt;
&lt;H5&gt;Binding UI Controls to LinqDataSource&lt;/H5&gt;
&lt;P&gt;Now let's wire up the DataList to the LinqDataSource.&amp;nbsp; The nice thing here is the DataList only cares about the field names returned from the LINQ query via the LinqDataSource -- this shields you as you continue to refine the fields and row results of your dynamic LINQ queries.&amp;nbsp; &lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Select the DataList in the designer.&amp;nbsp; Expand the smart tag and Choose Data Source = LinqDataSource1 &lt;/LI&gt;
&lt;LI&gt;Customize the DataList's ItemTemplate &lt;/LI&gt;
&lt;LI&gt;Run it!&amp;nbsp; (F5 or View in Browser) &lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;The wizard will create a series of bound labels by default.&amp;nbsp; You can use the designer in edit mode to get the specific fields, look and feel you want.&amp;nbsp; &lt;EM&gt;&lt;STRONG&gt;TIP:&lt;/STRONG&gt; This is typically where I drop in the html mark up "Source" view&lt;/EM&gt;.&amp;nbsp; In my example, I'll simply show the full name, notes, and have a place holder to show an employee photo image.&amp;nbsp; I also format the data in a two column table.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;If you look at the DataList mark up, you see the ItemTemplate contains a number of bound labels.&amp;nbsp; Binding to data from the query is simply a matter of typing in &amp;lt;%# Eval("YOURFIELDNAME") %&amp;gt; in your server control fields using classic ASP-style &amp;amp; VB data binding eval statements.&amp;nbsp; This gives you a lot of flexibility to display just the data you want, formatted how you want.&amp;nbsp; Here's my customization:&amp;nbsp; &lt;/P&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;div&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;
    &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;asp&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;:&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;DataList &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;ID&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="DataList1" &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;runat&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="server" &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;DataKeyField&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="EmployeeID" &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;DataSourceID&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="LinqDataSource1"&amp;gt;
        &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;HeaderTemplate&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;
            &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;table&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;
        &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;HeaderTemplate&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;
        &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;ItemTemplate&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;
            &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;tr&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;
                &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;td&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;
                    &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;img &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;src&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="PLACEHOLDER.jpg" &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;class&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="" &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;style&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="&lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;border&lt;/SPAN&gt;: &lt;SPAN style="COLOR: blue"&gt;4px solid white" &lt;BR&gt;                          &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;alt&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;='Photo Number XXX' /&amp;gt;
                    &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;br &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;/&amp;gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;br &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;/&amp;gt;
                &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;td&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;
                &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;td&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;
                    &lt;/SPAN&gt;EmployeeID:
                    &lt;SPAN style="COLOR: blue"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;asp&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;:&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;Label &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;ID&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="EmployeeIDLabel" &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;runat&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="server" &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Text&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;='&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: #ffee62"&gt;&amp;lt;%&lt;/SPAN&gt;# Eval("EmployeeID") &lt;SPAN style="BACKGROUND: #ffee62"&gt;%&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;' /&amp;gt;
                    &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;br &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;/&amp;gt;
                    &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;asp&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;:&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;Label &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;ID&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="LastNameLabel" &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;runat&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="server" &lt;BR&gt;                          &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Text&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;='&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: #ffee62"&gt;&amp;lt;%&lt;/SPAN&gt;# Eval("FirstName") &amp;amp; " " &amp;amp; Eval("LastName") &lt;SPAN style="BACKGROUND: #ffee62"&gt;%&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;' /&amp;gt;
                    &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;br &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;/&amp;gt;
                    &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;asp&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;:&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;Label &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;ID&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="NotesLabel" &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;runat&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="server" &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Text&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;='&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: #ffee62"&gt;&amp;lt;%&lt;/SPAN&gt;# Eval("Notes") &lt;SPAN style="BACKGROUND: #ffee62"&gt;%&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;' /&amp;gt;
                &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;td&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;
            &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;tr&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;
        &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;ItemTemplate&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;
        &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;FooterTemplate&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;
            &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;table&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;
        &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;FooterTemplate&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;
    &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;asp&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;:&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;DataList&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;
&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;div&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;BLOCKQUOTE&gt;&amp;nbsp;&lt;/BLOCKQUOTE&gt;
&lt;H5&gt;Using Custom LINQ Queries&lt;/H5&gt;
&lt;P&gt;The technique above provides a zero-code method for binding Web forms to LINQ data.&amp;nbsp; However, you might be asking yourself, where is the LINQ and VB here?&amp;nbsp; It's true the LinqDataSource hides all the querying code and constrains what you can do via the designer.&amp;nbsp; This is fine for some simple cases, but the real power of LINQ is being able to use your own free form queries and VB logic.&amp;nbsp; The good news is LinqDataSource supports using your own LINQ queries using the LinqDataSource.Selecting event.&amp;nbsp; This is your hook to tell the control exactly what query should be used.&amp;nbsp; It's easy.&amp;nbsp; Here's how:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Right-click on Default.aspx and select View Code ... to see the VB code behind file (Default.aspx.vb).&amp;nbsp; &lt;/LI&gt;
&lt;LI&gt;In the left-hand-side dropdown above the code editor, select the LinqDataSource1 object. &lt;/LI&gt;
&lt;LI&gt;In the right-hand-side dropdown above the code editor, select the Selecting event.&amp;nbsp; The event handler is stubbed out.&amp;nbsp; &lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/LINQforWebDevelopersByPaulYuk_B656/5VBDropdownsSelectingEvent_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/LINQforWebDevelopersByPaulYuk_B656/5VBDropdownsSelectingEvent_2.jpg"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=114 alt=5VBDropdownsSelectingEvent src="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/LINQforWebDevelopersByPaulYuk_B656/5VBDropdownsSelectingEvent_thumb.jpg" width=646 border=0 mce_src="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/LINQforWebDevelopersByPaulYuk_B656/5VBDropdownsSelectingEvent_thumb.jpg"&gt;&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;Write your custom LINQ query in the event handler.&amp;nbsp; Make sure you set &lt;STRONG&gt;e.Result = &amp;lt;your LINQ query variable&amp;gt;&lt;/STRONG&gt; before the event handler routine is finished running.&amp;nbsp; &lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;In my example I will query over Northwind employees, define a custom expression column called FullName (=First + Last), filter by full name starting with A or N, and sort by last name.&amp;nbsp; Note I'm creating aliases for each property and hence the query is now an anonymous type -- and the schema is now custom&amp;nbsp;vs. my default NorthwindDataContext with all (*) columns.&amp;nbsp; &lt;EM&gt;&lt;STRONG&gt;TIP:&lt;/STRONG&gt; if you're getting runtime errors when you try this make sure all the fields expected by your Web form are there -- e.g. if the form is expecting "EmployeeID" make sure your query Selects it.&amp;nbsp; &lt;/EM&gt;&lt;/P&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR: blue"&gt;Protected Sub &lt;/SPAN&gt;LinqDataSource1_Selecting(&lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;sender &lt;SPAN style="COLOR: blue"&gt;As Object&lt;/SPAN&gt;, &lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;e _
                                        &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;System.Web.UI.WebControls.LinqDataSourceSelectEventArgs) _
                                        &lt;STRONG&gt;&lt;SPAN style="COLOR: blue"&gt;Handles &lt;/SPAN&gt;LinqDataSource1.Selecting&lt;/STRONG&gt;

    &lt;SPAN style="COLOR: blue"&gt;Dim &lt;/SPAN&gt;northwind &lt;SPAN style="COLOR: blue"&gt;As New &lt;/SPAN&gt;NorthwindDataClassesDataContext

    &lt;SPAN style="COLOR: green"&gt;'custom anonymous LINQ query
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;Dim &lt;/SPAN&gt;query = &lt;SPAN style="COLOR: blue"&gt;From &lt;/SPAN&gt;emp &lt;SPAN style="COLOR: blue"&gt;In &lt;/SPAN&gt;northwind.Employees _
                &lt;SPAN style="COLOR: blue"&gt;Select &lt;/SPAN&gt;emp.EmployeeID, emp.FirstName, emp.LastName, emp.Notes, _
                    &lt;STRONG&gt;FullName = emp.FirstName &amp;amp; &lt;SPAN style="COLOR: #a31515"&gt;" " &lt;/SPAN&gt;&amp;amp; emp.LastName&lt;/STRONG&gt; _
                &lt;SPAN style="COLOR: blue"&gt;Where &lt;/SPAN&gt;FirstName.ToUpper.StartsWith(&lt;SPAN style="COLOR: #a31515"&gt;"A"&lt;/SPAN&gt;) &lt;SPAN style="COLOR: blue"&gt;Or &lt;/SPAN&gt;FirstName.ToUpper.StartsWith(&lt;SPAN style="COLOR: #a31515"&gt;"N"&lt;/SPAN&gt;) _
                &lt;SPAN style="COLOR: blue"&gt;Order By &lt;/SPAN&gt;FullName

    &lt;SPAN style="COLOR: green"&gt;'sets LinqDataSource query equal to custom query.  
    'use data binding expressions to look up aliased fields above. 
    &lt;/SPAN&gt;&lt;STRONG&gt;e.Result = query&lt;/STRONG&gt;
&lt;SPAN style="COLOR: blue"&gt;End Sub&lt;/SPAN&gt;&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;P&gt;You can run the app again and see the custom query is working -- only two rows are returned -- Andrew Fuller and Nancy Davolio.&amp;nbsp; We could also tweak the markup to make use of our new aliased expression column -- "FullName".&amp;nbsp; Here's how that would look in the DataList:&lt;/P&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;asp&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;:&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;DataList &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;ID&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="DataList1" &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;runat&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="server" &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;DataKeyField&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="EmployeeID" &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;DataSourceID&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="LinqDataSource1"&amp;gt;
    &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;HeaderTemplate&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;
        &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;table&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;
    &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;HeaderTemplate&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;
    &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;ItemTemplate&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;
        &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;tr&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;
            &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;td&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;
                &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;img &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;src&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="PLACEHOLDER.jpg" &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;class&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="" &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;style&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="&lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;border&lt;/SPAN&gt;: &lt;SPAN style="COLOR: blue"&gt;4px solid white" &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;alt&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;='Photo Number XXX' /&amp;gt;
                &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;br &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;/&amp;gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;br &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;/&amp;gt;
            &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;td&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;
            &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;td&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;
                &lt;/SPAN&gt;EmployeeID:
                &lt;SPAN style="COLOR: blue"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;asp&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;:&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;Label &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;ID&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="EmployeeIDLabel" &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;runat&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="server" &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Text&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;='&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: #ffee62"&gt;&amp;lt;%&lt;/SPAN&gt;# Eval("EmployeeID") &lt;SPAN style="BACKGROUND: #ffee62"&gt;%&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;' /&amp;gt;
                &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;br &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;/&amp;gt;
                &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;asp&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;:&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;Label &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;ID&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="LastNameLabel" &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;runat&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="server" &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Text&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;='&lt;/SPAN&gt;&lt;STRONG&gt;&lt;FONT size=4&gt;&lt;SPAN style="BACKGROUND: #ffee62"&gt;&amp;lt;%&lt;/SPAN&gt;# Eval("FullName") &lt;SPAN style="BACKGROUND: #ffee62"&gt;%&amp;gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;SPAN style="COLOR: blue"&gt;' /&amp;gt;
                &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;br &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;/&amp;gt;
                &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;asp&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;:&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;Label &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;ID&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="NotesLabel" &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;runat&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="server" &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Text&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;='&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: #ffee62"&gt;&amp;lt;%&lt;/SPAN&gt;# Eval("Notes") &lt;SPAN style="BACKGROUND: #ffee62"&gt;%&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;' /&amp;gt;
            &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;td&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;
        &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;tr&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;
    &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;ItemTemplate&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;
    &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;FooterTemplate&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;
        &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;table&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;
    &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;FooterTemplate&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;
&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;asp&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;:&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;DataList&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR: blue"&gt;&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;H5&gt;Summary &amp;amp; More Info&lt;/H5&gt;
&lt;P&gt;To wrap things up, it's easy to map what you know about Web Forms to what you're learning about Linq in VB.&amp;nbsp; The LinqDataSource connects your underlying Linq to SQL DataContext, or any generalized Linq query, to the rest of your Web Form.&amp;nbsp; You can create totally custom queries in the LinqDataSource.Selecting event and pass that to the control via e.Result.&amp;nbsp; And then you can get at any field or property in your Linq query using classic Eval("MYFIELD") data binding expressions.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;What do you think?&amp;nbsp; What additions would you like to see?&lt;/P&gt;
&lt;P&gt;If you want more info now, ScottGu put together an &lt;A class="" href="http://weblogs.asp.net/scottgu/archive/2007/09/07/linq-to-sql-part-9-using-a-custom-linq-expression-with-the-lt-asp-linqdatasource-gt-control.aspx" mce_href="http://weblogs.asp.net/scottgu/archive/2007/09/07/linq-to-sql-part-9-using-a-custom-linq-expression-with-the-lt-asp-linqdatasource-gt-control.aspx"&gt;awesome series of Linq to SQL posts&lt;/A&gt; for the Web, and he included VB sample code.&amp;nbsp; Another great portal for learning and How To content is &lt;A href="http://www.asp.net/"&gt;www.asp.net&lt;/A&gt;.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Best, &lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Papyrus size=5&gt;&lt;EM&gt;Paul&lt;/EM&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;----------------------------------&lt;/P&gt;
&lt;P&gt;Paul Yuknewicz &lt;BR&gt;Lead Program Manager &lt;BR&gt;Microsoft Visual Studio &lt;BR&gt;&lt;A href="http://msdn.com/vbasic/" mce_href="http://msdn.com/vbasic/"&gt;http://msdn.com/vbasic/&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6880595" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/vbteam/attachment/6880595.ashx" length="968481" type="application/x-zip-compressed" /><category domain="http://blogs.msdn.com/vbteam/archive/tags/Paul+Yuknewicz/default.aspx">Paul Yuknewicz</category><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/VB_5F00_Express/default.aspx">VB_Express</category><category domain="http://blogs.msdn.com/vbteam/archive/tags/VB2008/default.aspx">VB2008</category><category domain="http://blogs.msdn.com/vbteam/archive/tags/Web/default.aspx">Web</category></item><item><title>Channel 9 Interview: Brian Beckman Does Higher Algebra with Visual Basic (Beth Massi)</title><link>http://blogs.msdn.com/vbteam/archive/2007/12/19/channel-9-interview-brian-beckman-does-linear-algebra-with-visual-basic-beth-massi.aspx</link><pubDate>Wed, 19 Dec 2007 19:01:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6800961</guid><dc:creator>VBTeam</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/vbteam/comments/6800961.aspx</comments><wfw:commentRss>http://blogs.msdn.com/vbteam/commentrss.aspx?PostID=6800961</wfw:commentRss><description>&lt;A class="" href="http://channel9.msdn.com/ShowPost.aspx?PostID=367090" target=_blank mce_href="http://channel9.msdn.com/ShowPost.aspx?PostID=367090"&gt;I just posted an interview on Channel 9 with Brian Beckman&lt;/A&gt;, Principal Developer (currently working with Erik Meijer), where he attempts to teach me higher algebra using Visual Basic, generics, and operator overloading. Brian is a wonderful person and brilliant physicist and we have a lot of fun with vectors and matrices and VB. I actually think I understood some of what Brian showed me ;). &lt;BR&gt;&lt;BR&gt;Visual Basic is a great language for mathematics as well as all kinds of other applications.&amp;nbsp;Brian makes the point&amp;nbsp;that he has fun coding in VB because of its intuitive style and how easy it is to be immediately productive.&amp;nbsp;Check out &lt;A class="" href="http://blogs.msdn.com/vbteam/archive/2007/12/19/higher-algebra-with-operator-overloads-brian-beckman.aspx" target=_blank mce_href="http://blogs.msdn.com/vbteam/archive/2007/12/19/higher-algebra-with-operator-overloads-brian-beckman.aspx"&gt;Brian's blog post&lt;/A&gt; on the VB Team blog! And for all you abstract algebra aficionados, &lt;A class="" href="http://wrofeq.bay.livefilestore.com/y1pi__YcVhyovwgv0CHgXJmFjt5Suuy1lOhmLkGupZ0OLPm-qg22wRIBXV_nF0ezBXytE8OmoLRBRJZImw6Wi0cbw/LinearAlgebra.zip?download" mce_href="http://wrofeq.bay.livefilestore.com/y1pi__YcVhyovwgv0CHgXJmFjt5Suuy1lOhmLkGupZ0OLPm-qg22wRIBXV_nF0ezBXytE8OmoLRBRJZImw6Wi0cbw/LinearAlgebra.zip?download"&gt;here's the code to play with&lt;/A&gt;. &lt;BR&gt;&lt;BR&gt;Enjoy,&lt;BR&gt;-&lt;A class="" href="http://blogs.msdn.com/bethmassi/" target=_blank mce_href="http://blogs.msdn.com/bethmassi/"&gt;Beth Massi&lt;/A&gt;, VS Community&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6800961" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/vbteam/archive/tags/VB_5F00_Express/default.aspx">VB_Express</category><category domain="http://blogs.msdn.com/vbteam/archive/tags/VB2005/default.aspx">VB2005</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/VB2008/default.aspx">VB2008</category></item><item><title>Higher Algebra with Operator Overloads (Brian Beckman)</title><link>http://blogs.msdn.com/vbteam/archive/2007/12/19/higher-algebra-with-operator-overloads-brian-beckman.aspx</link><pubDate>Wed, 19 Dec 2007 19:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6801088</guid><dc:creator>VBTeam</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/vbteam/comments/6801088.aspx</comments><wfw:commentRss>http://blogs.msdn.com/vbteam/commentrss.aspx?PostID=6801088</wfw:commentRss><description>&lt;P&gt;&lt;A class="" href="http://channel9.msdn.com/ShowPost.aspx?PostID=367090" target=_blank mce_href="http://channel9.msdn.com/ShowPost.aspx?PostID=367090"&gt;Recently I did a Channel 9 interview&lt;/A&gt; with &lt;A class="" href="http://blogs.msdn.com/bethmassi/" target=_blank mce_href="http://blogs.msdn.com/bethmassi/"&gt;Beth Massi&lt;/A&gt; where I walked through a Visual Basic program that used Generics and Operator overloads to perform some higher mathematics. I thought I'd follow up with a post explaining the details of exactly what I did. &lt;/P&gt;
&lt;P&gt;Operator overloads with Generics enable some beautiful designs for data types in Higher Algebra, a branch of mathematics, sometimes called Abstract Algebra. Consider &lt;STRONG&gt;&lt;EM&gt;fields&lt;/EM&gt;&lt;/STRONG&gt; and &lt;STRONG&gt;&lt;EM&gt;vector spaces&lt;/EM&gt;&lt;/STRONG&gt;. &lt;FONT color=#ff0000&gt;I'll show you operator overloads at THREE levels in a single design.&lt;/FONT&gt; First, background: In this context, a "field" is a collection of unspecified objects, closed under two associative operators, + and *, that obey the distributive law. &lt;/P&gt;
&lt;P&gt;Closed means that for any a, b, and c in the field, a+b and a*c are in the field. Associative means &lt;/P&gt;
&lt;P&gt;a + (b + c) = (a + b) + c&lt;/P&gt;
&lt;P&gt;a * (b * c) = (a * b) * c&lt;/P&gt;
&lt;P&gt;Distributive means&lt;/P&gt;
&lt;P&gt;a * (b + c) = a * b + a * c&lt;/P&gt;
&lt;P&gt;(b + c) * a = b * a + c * a&lt;/P&gt;
&lt;P&gt;The field must also have two special members: the additive unit 0 and the multiplicative unit 1, where&lt;/P&gt;
&lt;P&gt;a + 0 = 0 + a = a&lt;/P&gt;
&lt;P&gt;a * 1 = 1 * a = a&lt;/P&gt;
&lt;P&gt;and must have for every a, an additive inverse, -a, such that a + -a = -a + a = 0. There must also be a multiplicative inverse for every element except 0, written 1/a, such that a * 1/a = 1/a * a = 1.&lt;/P&gt;
&lt;P&gt;Some authors insist on the commutative laws (a + b = b + a, a * b = b * a), too, but we don't, here. The most common examples of fields are the Rationals, the Real numbers, the Complex numbers, all of which have commutative addition and multiplication; and the Quaternions, which have non-commutative multiplication. &lt;/P&gt;
&lt;P&gt;Don't confuse the mathematical "field" with a "field" in a record, structure or class. &lt;/P&gt;
&lt;P&gt;In each instance of a field, we define + and * to do anything we want so long as they obey the associative and distributive laws. A "vector space over a field" is the set of &lt;EM&gt;n-tuples &lt;/EM&gt;or &lt;EM&gt;vectors &lt;/EM&gt;built up from members of the field and closed under an additional linear combination law, written with no operator symbol, or sometimes with *. If v and w are any two vectors, and f and g are any two members of the underlying field, then f v + g w is a vector, and, furthermore, &lt;/P&gt;
&lt;P&gt;f (v + w) = f v + f w&lt;/P&gt;
&lt;P&gt;(v + w) g = v g + w g&lt;/P&gt;
&lt;P&gt;(f + g) v = f v + g v&lt;/P&gt;
&lt;P&gt;w (f + g) = w f + w g&lt;/P&gt;
&lt;P&gt;Vector spaces are central in physics and simulation. Imagine 6-vectors of real numbers; such things represent particle states in "phase space" in classical mechanics. Imagine 4-vectors of complex numbers; such things appear in quantum mechanics. Similar structures occur all over Quantum Theory and Gravitation &lt;/P&gt;
&lt;P&gt;References: &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;"Vector Calculus, Linear Algebra, and Differential Forms" [VCLADF], by John H. Hubbard, Barbara Burke Hubbard; &lt;/LI&gt;
&lt;LI&gt;"Lie Groups, Lie Algebras, and Some of Their Applications," by Robert Gilmore &lt;/LI&gt;
&lt;LI&gt;"The Geometry of Physics," by Theodore Frankel &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Applications for vectors of quaternions are not so easy to come by, but, they are perfectly well defined, and, if we do our software design right, they "just work." Ditto for vectors over a purely symbolic field or over any other kind. It's not difficult to support field-like algebraic structures with non-associative multiplication within the same software design. Such things include the &lt;EM&gt;Cayley numbers&lt;/EM&gt; or &lt;EM&gt;octonions&lt;/EM&gt;, but, because of non-associativity, they don't mesh easily with linear algebra, and that's where we want to go. Stop with the quaternions.&lt;/P&gt;
&lt;P&gt;We extend the design to &lt;STRONG&gt;&lt;EM&gt;inner-product spaces&lt;/EM&gt;&lt;/STRONG&gt;, in which every vector has a dual, and to &lt;STRONG&gt;&lt;EM&gt;linear algebras&lt;/EM&gt;&lt;/STRONG&gt;: sets of linear transformations of vectors, realized as matrices. With just a little code, we build a general, extensible, optimizable library suitable for physics, engineering, and mathematics in any finite-dimensional vector spaces. &lt;/P&gt;
&lt;P&gt;We want three layers: &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;EM&gt;underlying&lt;/EM&gt;&lt;/STRONG&gt; types &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;EM&gt;field&lt;/EM&gt;&lt;/STRONG&gt; types, generic over the underlying types &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;EM&gt;linear-algebra &lt;/EM&gt;&lt;/STRONG&gt;types, generic over the field types &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;The &lt;EM&gt;underlying types &lt;/EM&gt;comprise built-ins like &lt;EM&gt;Double, &lt;/EM&gt;and custom types like &lt;EM&gt;Rational&lt;/EM&gt;, &lt;EM&gt;Complex&lt;/EM&gt;, &lt;EM&gt;Quaternion&lt;/EM&gt;, and &lt;EM&gt;Symbol&lt;/EM&gt;. Underlying types should implement the basic field operations, but can have many more operations for convenience, like optimized division routines. &lt;FONT color=#ff0000&gt;Operator overloading is a no-brainer for the underlying types&lt;/FONT&gt;. &lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000&gt;At the top level of the &lt;EM&gt;linear-algebra types&lt;/EM&gt;, operator overloads are again a no-brainer&lt;/FONT&gt; for vector + vector, matrix * vector, vector * matrix, matrix * matrix, vector * vector, and so on.&lt;/P&gt;
&lt;P&gt;At the middle layer, the &lt;EM&gt;field types &lt;/EM&gt;abstract and narrow the operations down to the bare minimum so that the linear-algebra types know what and only what to expect. In this layer, operator overloading is not quite a no-brainer, and there are a couple of different ways to go with a design. &lt;/P&gt;
&lt;P&gt;The first paragraph showed the field axioms, and these are what we must design into our &lt;EM&gt;field types&lt;/EM&gt;. One way to do that is to impose the field operations by interface:&lt;/P&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR: blue"&gt;Public Interface &lt;/SPAN&gt;IField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U) &lt;SPAN style="COLOR: green"&gt;'U is the "UNDERLYING" type

    'Get the underlying value.

    &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;Property &lt;/SPAN&gt;UValue() &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;U

    &lt;SPAN style="COLOR: green"&gt;'Generic users of IField type shouldn't be able to tell 
    'whether the Underlying type U has copy-reference 
    'semantics or copy-value semantics, so let's insist that 
    'providers of IField implement a Dup operation.

    &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;Function &lt;/SPAN&gt;Dup() &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;IField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U)

    &lt;SPAN style="COLOR: green"&gt;'This is what fields do (would be nice to have a contract 
    'for the distributive law). Must use a design like this 
    'since Interfaces cannot host Shared functions in general, 
    'and operator overloads in particular. 

    &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;Function &lt;/SPAN&gt;Add(&lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;that &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;IField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U)) &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;IField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U)
    &lt;SPAN style="COLOR: blue"&gt;Function &lt;/SPAN&gt;Mul(&lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;that &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;IField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U)) &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;IField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U)
    &lt;SPAN style="COLOR: blue"&gt;Function &lt;/SPAN&gt;AdditiveInverse(&lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;that &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;IField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U)) _
    &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;IField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U)
    &lt;SPAN style="COLOR: blue"&gt;Function &lt;/SPAN&gt;MultiplicativeInverse(&lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;that &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;IField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U)) _
    &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;IField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U)

    &lt;SPAN style="COLOR: green"&gt;'Every field must have these. Implement them as Shared and 
    'even Const if possible. 

    &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;ReadOnly Property &lt;/SPAN&gt;Zero() &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;IField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U)
    &lt;SPAN style="COLOR: blue"&gt;ReadOnly Property &lt;/SPAN&gt;Unity() &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;IField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U)

    &lt;SPAN style="COLOR: green"&gt;'The following is an auxiliary operation for the Normed 
    'Division Algebras to support Inner Product, or 
    '"Sesquilinear mappings." This computes the complex 
    'conjugate, the quaternion conjugate, and so on. If the 
    'underlying field does not have a natural dual field, then 
    'it's probably self-dual and just implement "Dual" as "Dup."

    &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;Function &lt;/SPAN&gt;Dual() &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;IField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U)

&lt;SPAN style="COLOR: blue"&gt;End Interface&lt;/SPAN&gt;&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;P&gt;An upside of this design is that both Structure types and Class types can implement the interface. Thus, the linear-algebra classes are independent of differences of copy semantics. Programmers may use Structure types for run-time speed at both the underlying-type level and at the field level.&lt;/P&gt;
&lt;P&gt;Here's an example of a Structure implementing a field of Doubles&lt;/P&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR: blue"&gt;Public Structure &lt;/SPAN&gt;SFDouble
    &lt;SPAN style="COLOR: blue"&gt;Implements &lt;/SPAN&gt;IField(&lt;SPAN style="COLOR: blue"&gt;Of Double&lt;/SPAN&gt;)
...
    &lt;SPAN style="COLOR: blue"&gt;Private &lt;/SPAN&gt;mValue &lt;SPAN style="COLOR: blue"&gt;As Double
    Public Property &lt;/SPAN&gt;UValue() &lt;SPAN style="COLOR: blue"&gt;As Double Implements &lt;/SPAN&gt;IField(&lt;SPAN style="COLOR: blue"&gt;Of Double&lt;/SPAN&gt;).UValue
        &lt;SPAN style="COLOR: blue"&gt;Get
            Return &lt;/SPAN&gt;mValue
        &lt;SPAN style="COLOR: blue"&gt;End Get
        Set&lt;/SPAN&gt;(&lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;value &lt;SPAN style="COLOR: blue"&gt;As Double&lt;/SPAN&gt;)
            mValue = value
        &lt;SPAN style="COLOR: blue"&gt;End Set
    End Property

    Public Sub New&lt;/SPAN&gt;(&lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;d &lt;SPAN style="COLOR: blue"&gt;As Double&lt;/SPAN&gt;)
        mValue = d
    &lt;SPAN style="COLOR: blue"&gt;End Sub
&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;...
    Public Function &lt;/SPAN&gt;Add(&lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;that &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;IField(&lt;SPAN style="COLOR: blue"&gt;Of Double&lt;/SPAN&gt;)) &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;IField(&lt;SPAN style="COLOR: blue"&gt;Of Double&lt;/SPAN&gt;) _
    &lt;SPAN style="COLOR: blue"&gt;Implements &lt;/SPAN&gt;IField(&lt;SPAN style="COLOR: blue"&gt;Of Double&lt;/SPAN&gt;).Add
        &lt;SPAN style="COLOR: blue"&gt;Return New &lt;/SPAN&gt;SFDouble(&lt;SPAN style="COLOR: blue"&gt;Me&lt;/SPAN&gt;.UValue + that.UValue)
    &lt;SPAN style="COLOR: blue"&gt;End Function

    Public Function &lt;/SPAN&gt;Dual() &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;IField(&lt;SPAN style="COLOR: blue"&gt;Of Double&lt;/SPAN&gt;) &lt;SPAN style="COLOR: blue"&gt;Implements &lt;/SPAN&gt;IField(&lt;SPAN style="COLOR: blue"&gt;Of Double&lt;/SPAN&gt;).Dual
        &lt;SPAN style="COLOR: blue"&gt;Return New &lt;/SPAN&gt;SFDouble(&lt;SPAN style="COLOR: blue"&gt;Me&lt;/SPAN&gt;.UValue)
    &lt;SPAN style="COLOR: blue"&gt;End Function

    Public Function &lt;/SPAN&gt;Dup() &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;IField(&lt;SPAN style="COLOR: blue"&gt;Of Double&lt;/SPAN&gt;) &lt;SPAN style="COLOR: blue"&gt;Implements &lt;/SPAN&gt;IField(&lt;SPAN style="COLOR: blue"&gt;Of Double&lt;/SPAN&gt;).Dup
        &lt;SPAN style="COLOR: blue"&gt;Return New &lt;/SPAN&gt;SFDouble(&lt;SPAN style="COLOR: blue"&gt;Me&lt;/SPAN&gt;.UValue)
    &lt;SPAN style="COLOR: blue"&gt;End Function

    Public Function &lt;/SPAN&gt;AdditiveInverse(&lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;that &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;IField(&lt;SPAN style="COLOR: blue"&gt;Of Double&lt;/SPAN&gt;)) &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;IField(&lt;SPAN style="COLOR: blue"&gt;Of Double&lt;/SPAN&gt;) _
    &lt;SPAN style="COLOR: blue"&gt;Implements &lt;/SPAN&gt;IField(&lt;SPAN style="COLOR: blue"&gt;Of Double&lt;/SPAN&gt;).AdditiveInverse
        &lt;SPAN style="COLOR: green"&gt;'Let the underlying math throw exception here if that.UValue == 0
        &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;Return New &lt;/SPAN&gt;FDouble(-&lt;SPAN style="COLOR: blue"&gt;Me&lt;/SPAN&gt;.UValue)
    &lt;SPAN style="COLOR: blue"&gt;End Function

    Public Function &lt;/SPAN&gt;MultiplicativeInverse(&lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;that &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;IField(&lt;SPAN style="COLOR: blue"&gt;Of Double&lt;/SPAN&gt;)) &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;IField(&lt;SPAN style="COLOR: blue"&gt;Of Double&lt;/SPAN&gt;) _
    &lt;SPAN style="COLOR: blue"&gt;Implements &lt;/SPAN&gt;IField(&lt;SPAN style="COLOR: blue"&gt;Of Double&lt;/SPAN&gt;).MultiplicativeInverse
        &lt;SPAN style="COLOR: green"&gt;'Let the underlying math throw exception here if that.UValue == 0
        &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;Return New &lt;/SPAN&gt;FDouble(1 / &lt;SPAN style="COLOR: blue"&gt;Me&lt;/SPAN&gt;.UValue)
    &lt;SPAN style="COLOR: blue"&gt;End Function

    Public Function &lt;/SPAN&gt;Mul(&lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;that &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;IField(&lt;SPAN style="COLOR: blue"&gt;Of Double&lt;/SPAN&gt;)) &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;IField(&lt;SPAN style="COLOR: blue"&gt;Of Double&lt;/SPAN&gt;) _
    &lt;SPAN style="COLOR: blue"&gt;Implements &lt;/SPAN&gt;IField(&lt;SPAN style="COLOR: blue"&gt;Of Double&lt;/SPAN&gt;).Mul
        &lt;SPAN style="COLOR: blue"&gt;Return New &lt;/SPAN&gt;SFDouble(&lt;SPAN style="COLOR: blue"&gt;Me&lt;/SPAN&gt;.UValue * that.UValue)
    &lt;SPAN style="COLOR: blue"&gt;End Function

    Private Shared &lt;/SPAN&gt;sUnity = &lt;SPAN style="COLOR: blue"&gt;New &lt;/SPAN&gt;SFDouble(1.0)
    &lt;SPAN style="COLOR: blue"&gt;Private Shared &lt;/SPAN&gt;sZero = &lt;SPAN style="COLOR: blue"&gt;New &lt;/SPAN&gt;SFDouble(0.0)

    &lt;SPAN style="COLOR: blue"&gt;Public ReadOnly Property &lt;/SPAN&gt;Unity() &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;IField(&lt;SPAN style="COLOR: blue"&gt;Of Double&lt;/SPAN&gt;) &lt;SPAN style="COLOR: blue"&gt;Implements &lt;/SPAN&gt;IField(&lt;SPAN style="COLOR: blue"&gt;Of Double&lt;/SPAN&gt;).Unity
        &lt;SPAN style="COLOR: blue"&gt;Get
            Return &lt;/SPAN&gt;sUnity
        &lt;SPAN style="COLOR: blue"&gt;End Get
    End Property

    Public ReadOnly Property &lt;/SPAN&gt;Zero() &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;IField(&lt;SPAN style="COLOR: blue"&gt;Of Double&lt;/SPAN&gt;) &lt;SPAN style="COLOR: blue"&gt;Implements &lt;/SPAN&gt;IField(&lt;SPAN style="COLOR: blue"&gt;Of Double&lt;/SPAN&gt;).Zero
        &lt;SPAN style="COLOR: blue"&gt;Get
            Return &lt;/SPAN&gt;sZero
        &lt;SPAN style="COLOR: blue"&gt;End Get
    End Property
&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;...
End Structure
&lt;/SPAN&gt;&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;P&gt;A &lt;EM&gt;Big Downside&lt;/EM&gt; though, for the purposes of this exercise, is &lt;FONT color=#ff0000&gt;no operator overloads at the field level&lt;/FONT&gt;, because operator overloads &lt;BR&gt;are &lt;EM&gt;Shared&lt;/EM&gt; by definition (i.e., &lt;EM&gt;static&lt;/EM&gt;) and interfaces can't support static methods (the reason is that static virtual methods don't make sense in .NET, and all methods in an interface are virtual).&lt;/P&gt;
&lt;P&gt;But, we want operator overloads at the field level, and we can get them through an alternative base-class design for fields. We lose Structures at the field level, since particular fields must inherit from a base Class, but the underlying types can still be structures.&lt;/P&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR: blue"&gt;Public MustInherit Class &lt;/SPAN&gt;AField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U) &lt;SPAN style="COLOR: green"&gt;'U is the "UNDERLYING" type
&lt;/SPAN&gt;&lt;FONT color=#008000&gt;...&lt;/FONT&gt;
    &lt;SPAN style="COLOR: blue"&gt;Private &lt;/SPAN&gt;mUValue &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;U
    &lt;SPAN style="COLOR: blue"&gt;Public Property &lt;/SPAN&gt;UValue() &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;U
        &lt;SPAN style="COLOR: blue"&gt;Get
            Return &lt;/SPAN&gt;mUValue
        &lt;SPAN style="COLOR: blue"&gt;End Get
        Set&lt;/SPAN&gt;(&lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;value &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;U)
            mUValue = value
        &lt;SPAN style="COLOR: blue"&gt;End Set
    End Property

    &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;'Now, our operator overloads just call virtual MustOverride Functions. 
    'Magically, these are NON-COMMUTATIVE in general, just as we want.

    &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;Public Shared Operator &lt;/SPAN&gt;+(&lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;e1 &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;AField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U), _
                             &lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;e2 &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;AField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U)) &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;AField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U)
        &lt;SPAN style="COLOR: blue"&gt;Return &lt;/SPAN&gt;e1.Add(e2)
    &lt;SPAN style="COLOR: blue"&gt;End Operator

    Public Shared Operator &lt;/SPAN&gt;-(&lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;e1 &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;AField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U), _
                             &lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;e2 &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;AField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U)) &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;AField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U)
        &lt;SPAN style="COLOR: blue"&gt;Return &lt;/SPAN&gt;e1.Add(e2.AdditiveInverse())
    &lt;SPAN style="COLOR: blue"&gt;End Operator

    Public Shared Operator &lt;/SPAN&gt;*(&lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;e1 &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;AField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U), _
                             &lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;e2 &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;AField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U)) &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;AField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U)
        &lt;SPAN style="COLOR: blue"&gt;Return &lt;/SPAN&gt;e1.Mul(e2)
    &lt;SPAN style="COLOR: blue"&gt;End Operator

    Public Shared Operator &lt;/SPAN&gt;/(&lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;e1 &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;AField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U), _
                             &lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;e2 &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;AField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U)) &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;AField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U)
        &lt;SPAN style="COLOR: blue"&gt;Return &lt;/SPAN&gt;e1.Mul(e2.MultiplicativeInverse())
    &lt;SPAN style="COLOR: blue"&gt;End Operator

    Public Shared Operator &lt;/SPAN&gt;-(&lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;that &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;AField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U)) &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;AField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U)
        &lt;SPAN style="COLOR: blue"&gt;Return &lt;/SPAN&gt;that.AdditiveInverse()
    &lt;SPAN style="COLOR: blue"&gt;End Operator

    Public Shared Operator Not&lt;/SPAN&gt;(&lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;that &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;AField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U)) &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;AField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U)
        &lt;SPAN style="COLOR: blue"&gt;Return &lt;/SPAN&gt;that.Dual()
    &lt;SPAN style="COLOR: blue"&gt;End Operator

    &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;'This is what fields do (would be nice to have a contract for the 
    'distributive law). 

    &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;MustOverride Function &lt;/SPAN&gt;Add(&lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;that &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;AField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U)) &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;AField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U)
    &lt;SPAN style="COLOR: blue"&gt;MustOverride Function &lt;/SPAN&gt;Mul(&lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;that &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;AField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U)) &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;AField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U)
    &lt;SPAN style="COLOR: blue"&gt;MustOverride Function &lt;/SPAN&gt;AdditiveInverse() &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;AField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U)
    &lt;SPAN style="COLOR: blue"&gt;MustOverride Function &lt;/SPAN&gt;MultiplicativeInverse() &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;AField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U)

    &lt;SPAN style="COLOR: green"&gt;'Every field must have these. Implement them as Shared and even Const if
    'possible. 

    &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;MustOverride ReadOnly Property &lt;/SPAN&gt;Zero() &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;AField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U)
    &lt;SPAN style="COLOR: blue"&gt;MustOverride ReadOnly Property &lt;/SPAN&gt;Unity() &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;AField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U)

    &lt;SPAN style="COLOR: green"&gt;'Generic users of IField type shouldn't be able to tell 
    'whether the Underlying type U has copy-reference 
    'semantics or copy-value semantics, so insist that 
    'subclasses of AField implement a Dup operation.

    &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;MustOverride Function &lt;/SPAN&gt;Dup() &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;AField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U)

    &lt;SPAN style="COLOR: green"&gt;'The following is an auxiliary operation for the Normed 
    'Division Algebras to support Inner Product, or 
    '"Sesquilinear mappings." This computes the complex 
    'conjugate, the quaternion conjugate, and so on. If the 
    'underlying field does not have a natural dual field, then 
    'it's probably self-dual and just implement "Dual" as "Dup."

    &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;MustOverride Function &lt;/SPAN&gt;Dual() &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;AField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U)

&lt;SPAN style="COLOR: blue"&gt;End Class
&lt;/SPAN&gt;&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;P&gt;Now we have operator overloads at the field level, but they're not virtual (they can't be). What they do is statically dispatch to &lt;BR&gt;virtual ADD and MUL methods, which are just like the ones we had in the interface design for the field level. Nice, eh? Here are the implementations for the field of Complexes, which are implemented in an underlying Structure type:&lt;/P&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR: blue"&gt;Public Class &lt;/SPAN&gt;AComplex
    &lt;SPAN style="COLOR: blue"&gt;Inherits &lt;/SPAN&gt;AField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;Complex)
...&lt;/PRE&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR: blue"&gt;    Public Overrides Function &lt;/SPAN&gt;Add(&lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;that &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;AField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;Complex)) &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;AField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;Complex)
        &lt;SPAN style="COLOR: blue"&gt;Return New &lt;/SPAN&gt;AComplex(&lt;SPAN style="COLOR: blue"&gt;Me&lt;/SPAN&gt;.UValue + that.UValue)
    &lt;SPAN style="COLOR: blue"&gt;End Function

    Public Overrides Function &lt;/SPAN&gt;AdditiveInverse() &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;AField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;Complex)
        &lt;SPAN style="COLOR: blue"&gt;Return New &lt;/SPAN&gt;AComplex(-&lt;SPAN style="COLOR: blue"&gt;Me&lt;/SPAN&gt;.UValue.R, -&lt;SPAN style="COLOR: blue"&gt;Me&lt;/SPAN&gt;.UValue.I)
    &lt;SPAN style="COLOR: blue"&gt;End Function

    Public Overrides Function &lt;/SPAN&gt;Dual() &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;AField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;Complex)
        &lt;SPAN style="COLOR: blue"&gt;Return New &lt;/SPAN&gt;AComplex(&lt;SPAN style="COLOR: blue"&gt;Not Me&lt;/SPAN&gt;.UValue)
    &lt;SPAN style="COLOR: blue"&gt;End Function

    Public Overrides Function &lt;/SPAN&gt;Dup() &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;AField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;Complex)
        &lt;SPAN style="COLOR: blue"&gt;Return New &lt;/SPAN&gt;AComplex(&lt;SPAN style="COLOR: blue"&gt;Me&lt;/SPAN&gt;)
    &lt;SPAN style="COLOR: blue"&gt;End Function

    Public Overrides Function &lt;/SPAN&gt;MultiplicativeInverse() &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;AField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;Complex)
        &lt;SPAN style="COLOR: blue"&gt;Return New &lt;/SPAN&gt;AComplex(1.0 / &lt;SPAN style="COLOR: blue"&gt;Me&lt;/SPAN&gt;.UValue)
    &lt;SPAN style="COLOR: blue"&gt;End Function

    Public Overrides Function &lt;/SPAN&gt;Mul(&lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;that &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;AField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;Complex)) &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;AField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;Complex)
        &lt;SPAN style="COLOR: blue"&gt;Return New &lt;/SPAN&gt;AComplex(&lt;SPAN style="COLOR: blue"&gt;Me&lt;/SPAN&gt;.UValue * that.UValue)
    &lt;SPAN style="COLOR: blue"&gt;End Function
...&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR: blue"&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;    Public Overrides ReadOnly Property &lt;/SPAN&gt;Unity() &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;AField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;Complex)
        &lt;SPAN style="COLOR: blue"&gt;Get
            Return New &lt;/SPAN&gt;AComplex(1.0, 0.0)
        &lt;SPAN style="COLOR: blue"&gt;End Get
    End Property

    Public Overrides ReadOnly Property &lt;/SPAN&gt;Zero() &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;AField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;Complex)
        &lt;SPAN style="COLOR: blue"&gt;Get
            Return New &lt;/SPAN&gt;AComplex(0.0, 0.0)
        &lt;SPAN style="COLOR: blue"&gt;End Get
    End Property

    Public Overrides Function &lt;/SPAN&gt;ToString() &lt;SPAN style="COLOR: blue"&gt;As String
        Return &lt;/SPAN&gt;UValue.ToString()
    &lt;SPAN style="COLOR: blue"&gt;End Function

End Class
&lt;/SPAN&gt;&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;P&gt;And here is its underlying type:&lt;/P&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR: blue"&gt;Imports &lt;/SPAN&gt;System.Text

&lt;SPAN style="COLOR: blue"&gt;Public Structure &lt;/SPAN&gt;Complex

    &lt;SPAN style="COLOR: blue"&gt;Private &lt;/SPAN&gt;mR &lt;SPAN style="COLOR: blue"&gt;As Double
    Public Property &lt;/SPAN&gt;R() &lt;SPAN style="COLOR: blue"&gt;As Double
        Get
            Return &lt;/SPAN&gt;mR
        &lt;SPAN style="COLOR: blue"&gt;End Get
        Set&lt;/SPAN&gt;(&lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;value &lt;SPAN style="COLOR: blue"&gt;As Double&lt;/SPAN&gt;)
            mR = value
        &lt;SPAN style="COLOR: blue"&gt;End Set
    End Property

    Private &lt;/SPAN&gt;mI &lt;SPAN style="COLOR: blue"&gt;As Double
    Public Property &lt;/SPAN&gt;I() &lt;SPAN style="COLOR: blue"&gt;As Double
        Get
            Return &lt;/SPAN&gt;mI
        &lt;SPAN style="COLOR: blue"&gt;End Get
        Set&lt;/SPAN&gt;(&lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;value &lt;SPAN style="COLOR: blue"&gt;As Double&lt;/SPAN&gt;)
            mI = value
        &lt;SPAN style="COLOR: blue"&gt;End Set
    End Property
&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;...
    Public Shared Operator &lt;/SPAN&gt;-(&lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;that &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;Complex) &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;Complex
        &lt;SPAN style="COLOR: blue"&gt;Return New &lt;/SPAN&gt;Complex(-that.R, -that.I)
    &lt;SPAN style="COLOR: blue"&gt;End Operator

    Public Shared Operator &lt;/SPAN&gt;+(&lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;c1 &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;Complex, &lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;c2 &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;Complex) &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;Complex
        &lt;SPAN style="COLOR: blue"&gt;Dim &lt;/SPAN&gt;result = &lt;SPAN style="COLOR: blue"&gt;New &lt;/SPAN&gt;Complex()
        result.R = c1.R + c2.R
        result.I = c1.I + c2.I
        &lt;SPAN style="COLOR: blue"&gt;Return &lt;/SPAN&gt;result
    &lt;SPAN style="COLOR: blue"&gt;End Operator

    Public Shared Operator &lt;/SPAN&gt;*(&lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;c1 &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;Complex, &lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;c2 &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;Complex) &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;Complex
        &lt;SPAN style="COLOR: blue"&gt;Dim &lt;/SPAN&gt;result = &lt;SPAN style="COLOR: blue"&gt;New &lt;/SPAN&gt;Complex()
        result.R = (c1.R * c2.R) - (c1.I * c2.I)
        result.I = (c1.R * c2.I) + (c1.I * c2.R)
        &lt;SPAN style="COLOR: blue"&gt;Return &lt;/SPAN&gt;result
    &lt;SPAN style="COLOR: blue"&gt;End Operator

    Public Shared Operator Not&lt;/SPAN&gt;(&lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;c1 &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;Complex) &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;Complex
        &lt;SPAN style="COLOR: blue"&gt;Return New &lt;/SPAN&gt;Complex(c1.R, -c1.I)
    &lt;SPAN style="COLOR: blue"&gt;End Operator
...&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR: blue"&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;    Public Shared Operator &lt;/SPAN&gt;*(&lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;c &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;Complex, &lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;scalar &lt;SPAN style="COLOR: blue"&gt;As Double&lt;/SPAN&gt;) &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;Complex
        &lt;SPAN style="COLOR: blue"&gt;Return New &lt;/SPAN&gt;Complex(c.R * scalar, c.I * scalar)
    &lt;SPAN style="COLOR: blue"&gt;End Operator

    Public Shared Operator &lt;/SPAN&gt;/(&lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;c &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;Complex, &lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;scalar &lt;SPAN style="COLOR: blue"&gt;As Double&lt;/SPAN&gt;) &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;Complex
        &lt;SPAN style="COLOR: blue"&gt;Return New &lt;/SPAN&gt;Complex(c.R / scalar, c.I / scalar)
    &lt;SPAN style="COLOR: blue"&gt;End Operator

    Public Shared Operator &lt;/SPAN&gt;/(&lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;c1 &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;Complex, &lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;c2 &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;Complex) &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;Complex
        &lt;SPAN style="COLOR: blue"&gt;Return &lt;/SPAN&gt;c1 * &lt;SPAN style="COLOR: blue"&gt;Not &lt;/SPAN&gt;c2 / c2.MagnitudeSquared()
    &lt;SPAN style="COLOR: blue"&gt;End Operator
...&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR: blue"&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;End Structure
&lt;/SPAN&gt;&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;P&gt;Now, we have an example of a Field generic on an underlying type, How about the Vector space? I wrote one vector space generic &lt;BR&gt;on the interface-style Field design, and another vector space generic on the base-class Field design. Here is the latter one, it's prettier:&lt;/P&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR: blue"&gt;Imports &lt;/SPAN&gt;System.Text

&lt;SPAN style="COLOR: green"&gt;'The only reason I must mention the underlying type, U, here, is to pass it to the
'Generic AField interface. I don't use U anywhere explicitly inside this. If I had 
'"Monads" in the Generic type language, then I could thread U through this via a 
'"bind" operator, very pretty, but dreamland.

&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;Public Class &lt;/SPAN&gt;ANVector(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U, T &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;{&lt;SPAN style="COLOR: blue"&gt;New&lt;/SPAN&gt;, AField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U)})

    &lt;SPAN style="COLOR: blue"&gt;Private &lt;/SPAN&gt;mDimension &lt;SPAN style="COLOR: blue"&gt;As Integer
    Public ReadOnly Property &lt;/SPAN&gt;Dimension() &lt;SPAN style="COLOR: blue"&gt;As Integer
        Get
            Return &lt;/SPAN&gt;mDimension
        &lt;SPAN style="COLOR: blue"&gt;End Get
    End Property

    Private &lt;/SPAN&gt;mComponents() &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;T
    &lt;SPAN style="COLOR: blue"&gt;Default Property &lt;/SPAN&gt;Component(&lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;i &lt;SPAN style="COLOR: blue"&gt;As Integer&lt;/SPAN&gt;) &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;T
        &lt;SPAN style="COLOR: blue"&gt;Get
            &lt;/SPAN&gt;Component = mComponents(i)
        &lt;SPAN style="COLOR: blue"&gt;End Get
        Set&lt;/SPAN&gt;(&lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;Value &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;T)
            mComponents(i) = Value
        &lt;SPAN style="COLOR: blue"&gt;End Set
    End Property
...&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR: blue"&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;    &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;Public Sub New&lt;/SPAN&gt;(&lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;that &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;ANVector(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U, T))
        mDimension = that.Dimension
        &lt;SPAN style="COLOR: blue"&gt;ReDim &lt;/SPAN&gt;mComponents(Dimension)
        &lt;SPAN style="COLOR: blue"&gt;For &lt;/SPAN&gt;i = 1 &lt;SPAN style="COLOR: blue"&gt;To &lt;/SPAN&gt;Dimension
            &lt;SPAN style="COLOR: green"&gt;'Cannot call New with parameters on Generic types ... Sorry)
            ' --&amp;gt; Me.mComponents(i) = New T(that(i))
            &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;Me&lt;/SPAN&gt;.mComponents(i) = that(i).Dup()
        &lt;SPAN style="COLOR: blue"&gt;Next
    End Sub

    &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;'Add two vectors. PROPERLY, vectors should themselves implement IModule, etc. Some day...
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;Public Shared Operator &lt;/SPAN&gt;+(&lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;V1 &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;ANVector(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U, T), &lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;V2 &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;ANVector(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U, T)) _
    &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;ANVector(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U, T)
        &lt;SPAN style="COLOR: blue"&gt;If &lt;/SPAN&gt;V1.Dimension &amp;lt;&amp;gt; V2.Dimension &lt;SPAN style="COLOR: blue"&gt;Then
            Throw New &lt;/SPAN&gt;VectorSpaceException(&lt;SPAN style="COLOR: #a31515"&gt;"Cannot add vectors of different dimensions"&lt;/SPAN&gt;)
        &lt;SPAN style="COLOR: blue"&gt;Else
            Dim &lt;/SPAN&gt;result = &lt;SPAN style="COLOR: blue"&gt;New &lt;/SPAN&gt;ANVector(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U, T)(V1) &lt;SPAN style="COLOR: green"&gt;'clone
            &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;For &lt;/SPAN&gt;i = 1 &lt;SPAN style="COLOR: blue"&gt;To &lt;/SPAN&gt;result.Dimension
                result(i) = result(i) + V2(i)&lt;FONT color=#008000&gt;''' OPERATOR OVERLOADS BEING USED&lt;/FONT&gt; 
            &lt;SPAN style="COLOR: blue"&gt;Next
            Return &lt;/SPAN&gt;result
        &lt;SPAN style="COLOR: blue"&gt;End If
    End Operator

    &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;'Scale a vector
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;Public Shared Operator &lt;/SPAN&gt;*(&lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;that &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;ANVector(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U, T), &lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;scalar &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;T) _
    &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;ANVector(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U, T)
        &lt;SPAN style="COLOR: blue"&gt;Dim &lt;/SPAN&gt;result = &lt;SPAN style="COLOR: blue"&gt;New &lt;/SPAN&gt;ANVector(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U, T)(that)
        &lt;SPAN style="COLOR: blue"&gt;For &lt;/SPAN&gt;i = 1 &lt;SPAN style="COLOR: blue"&gt;To &lt;/SPAN&gt;result.Dimension
            result(i) = result(i) * scalar&lt;FONT color=#008000&gt;''' OPERATOR OVERLOADS BEING USED&lt;/FONT&gt; 
        &lt;SPAN style="COLOR: blue"&gt;Next
        Return &lt;/SPAN&gt;result
    &lt;SPAN style="COLOR: blue"&gt;End Operator

    Public Shared Operator &lt;/SPAN&gt;*(&lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;scalar &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;T, &lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;that &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;ANVector(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U, T)) _
    &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;ANVector(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U, T)
        &lt;SPAN style="COLOR: blue"&gt;Return &lt;/SPAN&gt;that * scalar&lt;FONT color=#008000&gt;''' OPERATOR OVERLOADS BEING USED&lt;/FONT&gt; 
    &lt;SPAN style="COLOR: blue"&gt;End Operator

    Public Function &lt;/SPAN&gt;Dual()
        &lt;SPAN style="COLOR: blue"&gt;Dim &lt;/SPAN&gt;result = &lt;SPAN style="COLOR: blue"&gt;New &lt;/SPAN&gt;ANVector(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U, T)(&lt;SPAN style="COLOR: blue"&gt;Me&lt;/SPAN&gt;.Dimension)
        &lt;SPAN style="COLOR: blue"&gt;For &lt;/SPAN&gt;i = 1 &lt;SPAN style="COLOR: blue"&gt;To &lt;/SPAN&gt;result.Dimension
            result(i) = &lt;SPAN style="COLOR: blue"&gt;Not &lt;/SPAN&gt;result(i)&lt;FONT color=#008000&gt;''' OPERATOR OVERLOADS BEING USED&lt;/FONT&gt; 
        &lt;SPAN style="COLOR: blue"&gt;Next
        Return &lt;/SPAN&gt;result
    &lt;SPAN style="COLOR: blue"&gt;End Function

    Public Shared Operator Not&lt;/SPAN&gt;(&lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;V &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;ANVector(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U, T)) &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;ANVector(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U, T)
        &lt;SPAN style="COLOR: blue"&gt;Return &lt;/SPAN&gt;V.Dual()
    &lt;SPAN style="COLOR: blue"&gt;End Operator

    &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;'Inner product
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;Public Shared Operator &lt;/SPAN&gt;*(&lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;Left &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;ANVector(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U, T), &lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;Right &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;ANVector(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U, T)) _
    &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;T
        &lt;SPAN style="COLOR: blue"&gt;If &lt;/SPAN&gt;Left.Dimension &amp;lt;&amp;gt; Right.Dimension &lt;SPAN style="COLOR: blue"&gt;Then
            Throw New &lt;/SPAN&gt;VectorSpaceException _
            (&lt;SPAN style="COLOR: #a31515"&gt;"Cannot compute inner product of vectors with different dimensions"&lt;/SPAN&gt;)
        &lt;SPAN style="COLOR: blue"&gt;Else
            Dim &lt;/SPAN&gt;result &lt;SPAN style="COLOR: blue"&gt;As New &lt;/SPAN&gt;T()
            &lt;SPAN style="COLOR: blue"&gt;Dim &lt;/SPAN&gt;temp &lt;SPAN style="COLOR: blue"&gt;As New &lt;/SPAN&gt;T()
            &lt;SPAN style="COLOR: blue"&gt;For &lt;/SPAN&gt;i = 1 &lt;SPAN style="COLOR: blue"&gt;To &lt;/SPAN&gt;Left.Dimension
                result = result + Left(i) * &lt;SPAN style="COLOR: blue"&gt;Not &lt;/SPAN&gt;Right(i)&lt;FONT color=#008000&gt;''' OPERATOR OVERLOADS BEING USED&lt;/FONT&gt; 
            &lt;SPAN style="COLOR: blue"&gt;Next
            Return &lt;/SPAN&gt;result
        &lt;SPAN style="COLOR: blue"&gt;End If
    End Operator
&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;...
End Class
'================================================================&lt;/SPAN&gt;&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR: blue"&gt;Imports &lt;/SPAN&gt;System.Text

&lt;SPAN style="COLOR: blue"&gt;Public Class &lt;/SPAN&gt;AMNMatrix(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U, T &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;{&lt;SPAN style="COLOR: blue"&gt;New&lt;/SPAN&gt;, AField(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U)})

    &lt;SPAN style="COLOR: blue"&gt;Private &lt;/SPAN&gt;mRowCount &lt;SPAN style="COLOR: blue"&gt;As Integer
    Public ReadOnly Property &lt;/SPAN&gt;Rows() &lt;SPAN style="COLOR: blue"&gt;As Integer
        Get
            Return &lt;/SPAN&gt;mRowCount
        &lt;SPAN style="COLOR: blue"&gt;End Get
    End Property

    Private &lt;/SPAN&gt;mColumnCount &lt;SPAN style="COLOR: blue"&gt;As Integer
    Public ReadOnly Property &lt;/SPAN&gt;Columns() &lt;SPAN style="COLOR: blue"&gt;As Integer
        Get
            Return &lt;/SPAN&gt;mColumnCount
        &lt;SPAN style="COLOR: blue"&gt;End Get
    End Property

    Private &lt;/SPAN&gt;mElements &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;T(,)
    &lt;SPAN style="COLOR: blue"&gt;Default Property &lt;/SPAN&gt;Element(&lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;i &lt;SPAN style="COLOR: blue"&gt;As Integer&lt;/SPAN&gt;, &lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;j &lt;SPAN style="COLOR: blue"&gt;As Integer&lt;/SPAN&gt;) &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;T
        &lt;SPAN style="COLOR: blue"&gt;Get
            Return &lt;/SPAN&gt;mElements(i, j)
        &lt;SPAN style="COLOR: blue"&gt;End Get
        Set&lt;/SPAN&gt;(&lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;Value &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;T)
            mElements(i, j) = Value
        &lt;SPAN style="COLOR: blue"&gt;End Set
    End Property
&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;...
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;'Scale a matrix
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;Public Shared Operator &lt;/SPAN&gt;*(&lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;scalar &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;T, &lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;that &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;AMNMatrix(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U, T)) _
    &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;AMNMatrix(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U, T)
        &lt;SPAN style="COLOR: blue"&gt;Dim &lt;/SPAN&gt;result = &lt;SPAN style="COLOR: blue"&gt;New &lt;/SPAN&gt;AMNMatrix(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U, T)(that)
        &lt;SPAN style="COLOR: blue"&gt;For &lt;/SPAN&gt;i = 1 &lt;SPAN style="COLOR: blue"&gt;To &lt;/SPAN&gt;that.Rows
            &lt;SPAN style="COLOR: blue"&gt;For &lt;/SPAN&gt;j = 1 &lt;SPAN style="COLOR: blue"&gt;To &lt;/SPAN&gt;that.Columns
                result(i, j) = result(i, j) * scalar &lt;FONT color=#008000&gt;''' OPERATOR OVERLOADS BEING USED&lt;/FONT&gt;
            &lt;SPAN style="COLOR: blue"&gt;Next
        Next
        Return &lt;/SPAN&gt;result
    &lt;SPAN style="COLOR: blue"&gt;End Operator

    &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;'Scale a matrix
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;Public Shared Operator &lt;/SPAN&gt;*(&lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;that &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;AMNMatrix(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U, T), &lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;scalar &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;T) _
    &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;AMNMatrix(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U, T)
        &lt;SPAN style="COLOR: blue"&gt;Return &lt;/SPAN&gt;scalar * that&lt;FONT color=#008000&gt;''' OPERATOR OVERLOADS BEING USED&lt;/FONT&gt; 
    &lt;SPAN style="COLOR: blue"&gt;End Operator
&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;
&lt;SPAN style="COLOR: blue"&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;    'Matrix plus matrix &lt;/SPAN&gt;&lt;BR&gt;    Public Shared Operator &lt;/SPAN&gt;+(&lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;M1 &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;AMNMatrix(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U, T), &lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;M2 &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;AMNMatrix(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U, T)) _
    &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;AMNMatrix(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U, T)
        &lt;SPAN style="COLOR: blue"&gt;If &lt;/SPAN&gt;M1.Rows &amp;lt;&amp;gt; M2.Rows &lt;SPAN style="COLOR: blue"&gt;Or &lt;/SPAN&gt;M1.Columns &amp;lt;&amp;gt; M2.Columns &lt;SPAN style="COLOR: blue"&gt;Then
            Throw New &lt;/SPAN&gt;VectorSpaceException(&lt;SPAN style="COLOR: #a31515"&gt;"Cannot add matrices of different dimensions"&lt;/SPAN&gt;)
        &lt;SPAN style="COLOR: blue"&gt;Else
            Dim &lt;/SPAN&gt;result = &lt;SPAN style="COLOR: blue"&gt;New &lt;/SPAN&gt;AMNMatrix(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U, T)(M1)
            &lt;SPAN style="COLOR: blue"&gt;For &lt;/SPAN&gt;i = 1 &lt;SPAN style="COLOR: blue"&gt;To &lt;/SPAN&gt;M1.Rows
                &lt;SPAN style="COLOR: blue"&gt;For &lt;/SPAN&gt;j = 1 &lt;SPAN style="COLOR: blue"&gt;To &lt;/SPAN&gt;M1.Columns
                    result(i, j) = result(i, j) + M2(i, j) &lt;FONT color=#008000&gt;''' OPERATOR OVERLOADS BEING USED&lt;/FONT&gt;
                &lt;SPAN style="COLOR: blue"&gt;Next
            Next
            Return &lt;/SPAN&gt;result
        &lt;SPAN style="COLOR: blue"&gt;End If
    End Operator

    &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;'Matrix times a vector
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;Public Shared Operator &lt;/SPAN&gt;*(&lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;m &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;AMNMatrix(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U, T), &lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;v &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;ANVector(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U, T)) _
    &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;ANVector(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U, T)
        &lt;SPAN style="COLOR: blue"&gt;If &lt;/SPAN&gt;m.Columns &amp;lt;&amp;gt; v.Dimension &lt;SPAN style="COLOR: blue"&gt;Then
            Throw New &lt;/SPAN&gt;VectorSpaceException(&lt;SPAN style="COLOR: #a31515"&gt;"The number of columns in the matrix must equal " &lt;/SPAN&gt;&amp;amp; _
                                           &lt;SPAN style="COLOR: #a31515"&gt;"the dimension of the vector"&lt;/SPAN&gt;)
        &lt;SPAN style="COLOR: blue"&gt;Else
            Dim &lt;/SPAN&gt;result = &lt;SPAN style="COLOR: blue"&gt;New &lt;/SPAN&gt;ANVector(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U, T)(m.Rows)
            &lt;SPAN style="COLOR: blue"&gt;For &lt;/SPAN&gt;i = 1 &lt;SPAN style="COLOR: blue"&gt;To &lt;/SPAN&gt;m.Rows
                &lt;SPAN style="COLOR: blue"&gt;For &lt;/SPAN&gt;j = 1 &lt;SPAN style="COLOR: blue"&gt;To &lt;/SPAN&gt;m.Columns
                    result(i) = result(i) + v(j) * m(i, j) &lt;FONT color=#008000&gt;''' OPERATOR OVERLOADS BEING USED&lt;/FONT&gt;
                &lt;SPAN style="COLOR: blue"&gt;Next
            Next
            Return &lt;/SPAN&gt;result
        &lt;SPAN style="COLOR: blue"&gt;End If
    End Operator

    &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;'Vector times a Matrix 
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;Public Shared Operator &lt;/SPAN&gt;*(&lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;v &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;ANVector(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U, T), &lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;m &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;AMNMatrix(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U, T)) _
    &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;ANVector(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U, T)
        &lt;SPAN style="COLOR: blue"&gt;If &lt;/SPAN&gt;m.Rows &amp;lt;&amp;gt; v.Dimension &lt;SPAN style="COLOR: blue"&gt;Then
            Throw New &lt;/SPAN&gt;VectorSpaceException(&lt;SPAN style="COLOR: #a31515"&gt;"The dimension of the vector must equal" &lt;/SPAN&gt;&amp;amp; _
                                           &lt;SPAN style="COLOR: #a31515"&gt;"the number of rows in the matrix"&lt;/SPAN&gt;)
        &lt;SPAN style="COLOR: blue"&gt;Else
            Dim &lt;/SPAN&gt;result = &lt;SPAN style="COLOR: blue"&gt;New &lt;/SPAN&gt;ANVector(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U, T)(m.Columns)
            &lt;SPAN style="COLOR: blue"&gt;For &lt;/SPAN&gt;j = 1 &lt;SPAN style="COLOR: blue"&gt;To &lt;/SPAN&gt;m.Columns
                &lt;SPAN style="COLOR: blue"&gt;For &lt;/SPAN&gt;i = 1 &lt;SPAN style="COLOR: blue"&gt;To &lt;/SPAN&gt;m.Rows
                    result(j) = result(j) + v(i) * m(i, j) &lt;FONT color=#008000&gt;''' OPERATOR OVERLOADS BEING USED&lt;/FONT&gt;
                &lt;SPAN style="COLOR: blue"&gt;Next
            Next
            Return &lt;/SPAN&gt;result
        &lt;SPAN style="COLOR: blue"&gt;End If
    End Operator

    &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;'Matrix times Matrix
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;Public Shared Operator &lt;/SPAN&gt;*(&lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;left &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;AMNMatrix(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U, T), &lt;SPAN style="COLOR: blue"&gt;ByVal &lt;/SPAN&gt;right &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;AMNMatrix(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U, T)) _
    &lt;SPAN style="COLOR: blue"&gt;As &lt;/SPAN&gt;AMNMatrix(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U, T)
        &lt;SPAN style="COLOR: blue"&gt;If &lt;/SPAN&gt;left.Columns &amp;lt;&amp;gt; right.Rows &lt;SPAN style="COLOR: blue"&gt;Then
            Throw New &lt;/SPAN&gt;VectorSpaceException(&lt;SPAN style="COLOR: #a31515"&gt;"The number of columns in the left matrix must equal" &lt;/SPAN&gt;&amp;amp; _
                                           &lt;SPAN style="COLOR: #a31515"&gt;"The number of rows in the right matrix"&lt;/SPAN&gt;)
        &lt;SPAN style="COLOR: blue"&gt;Else
            Dim &lt;/SPAN&gt;result = &lt;SPAN style="COLOR: blue"&gt;New &lt;/SPAN&gt;AMNMatrix(&lt;SPAN style="COLOR: blue"&gt;Of &lt;/SPAN&gt;U, T)(left.Rows, right.Columns)
            &lt;SPAN style="COLOR: blue"&gt;Dim &lt;/SPAN&gt;inner = left.Columns
            &lt;SPAN style="COLOR: blue"&gt;For &lt;/SPAN&gt;i = 1 &lt;SPAN style="COLOR: blue"&gt;To &lt;/SPAN&gt;result.Rows
                &lt;SPAN style="COLOR: blue"&gt;For &lt;/SPAN&gt;j = 1 &lt;SPAN style="COLOR: blue"&gt;To &lt;/SPAN&gt;result.Columns
                    &lt;SPAN style="COLOR: blue"&gt;For &lt;/SPAN&gt;k = 1 &lt;SPAN style="COLOR: blue"&gt;To &lt;/SPAN&gt;inner &lt;FONT color=#008000&gt;''' OPERATOR OVERLOADS BEING USED&lt;/FONT&gt;
                        result(i, j) = result(i, j) + left(i, k) * right(k, j)
                    &lt;SPAN style="COLOR: blue"&gt;Next
                Next
            Next
            Return &lt;/SPAN&gt;result
        &lt;SPAN style="COLOR: blue"&gt;End If
    End Operator
&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;...
End Class
&lt;/SPAN&gt;&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;P&gt;There we go: operator overloading at three levels! I've uploaded a zipped Visual-Studio 2008 project to my &lt;A href="http://wrofeq.bay.livefilestore.com/y1pi__YcVhyovwgv0CHgXJmFjt5Suuy1lOhmLkGupZ0OLPm-qg22wRIBXV_nF0ezBXytE8OmoLRBRJZImw6Wi0cbw/LinearAlgebra.zip?download" mce_href="http://wrofeq.bay.livefilestore.com/y1pi__YcVhyovwgv0CHgXJmFjt5Suuy1lOhmLkGupZ0OLPm-qg22wRIBXV_nF0ezBXytE8OmoLRBRJZImw6Wi0cbw/LinearAlgebra.zip?download"&gt;Public folder&lt;/A&gt; with all this code. &lt;BR&gt;Play around, let me know what you think.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6801088" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/vbteam/archive/tags/VB_5F00_Express/default.aspx">VB_Express</category><category domain="http://blogs.msdn.com/vbteam/archive/tags/VB2005/default.aspx">VB2005</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/VB2008/default.aspx">VB2008</category></item><item><title>Hidden Gems in Visual Basic 2008 (Amanda Silver)</title><link>http://blogs.msdn.com/vbteam/archive/2007/11/20/hidden-gems-in-visual-basic-2008-amanda-silver.aspx</link><pubDate>Wed, 21 Nov 2007 09:24:16 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6450618</guid><dc:creator>VBTeam</dc:creator><slash:comments>18</slash:comments><comments>http://blogs.msdn.com/vbteam/comments/6450618.aspx</comments><wfw:commentRss>http://blogs.msdn.com/vbteam/commentrss.aspx?PostID=6450618</wfw:commentRss><description>&lt;p&gt;Yesterday I &lt;a href="http://blogs.msdn.com/vbteam/archive/2007/11/19/visual-basic-2008-ships.aspx"&gt;promised to post&lt;/a&gt; about the hidden gems in Visual Basic and Visual Studio 2008 that you haven&amp;#8217;t read about in blog posts or seen at conferences. I forgot that I mentioned a few of my favorite features in the &lt;a href="http://blogs.msdn.com/vbteam/archive/2007/04/19/visual-basic-orcas-beta1-is-in-the-wild.aspx"&gt;Beta1 announcement&lt;/a&gt; where I showed off the improvements in the Intellisense experience &amp;#8211; statement completion for keywords, local variables, and expressions. In that post, I also cover a new language feature called Relaxed Delegates which allows you to provide alternate signatures for events. Both of those are pretty great features &amp;#8211; but I promised to tell you about some &lt;i&gt;new &lt;/i&gt;stuff.&lt;/p&gt;  &lt;p&gt;I polled the team and we came up with the following top ten that weren&amp;#8217;t mentioned in my previous post. There&amp;#8217;s so much I &lt;i&gt;could &lt;/i&gt;talk about &amp;#8211; but you&amp;#8217;re going to have to check back. But first, I have to start with a keynote feature&amp;#8230; &lt;/p&gt;  &lt;h5&gt;&lt;b&gt;0) &lt;/b&gt;&lt;b&gt;Multi-targetting&lt;/b&gt;&lt;/h5&gt;  &lt;p&gt;In short, multi-targetting allows you to use Visual Studio 2008 (and VB 9!) to target the .NET 2.0 frameworks. All of the following features I&amp;#8217;ll show you can be leveraged even if you&amp;#8217;re targeting .NET 2.0! (With the exception of items #5 &amp;amp; #7 as they depend on the LINQ to Objects and LINQ to XML APIs which reside in .NET 3.5) To do this, when you start up Visual Studio and create a new project, just make sure that the target framework is set to .NET Framework 2.0. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/HiddenGemsinVisualBasic2008AmandaSilver_138CC/clip_image002_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="161" alt="clip_image002" src="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/HiddenGemsinVisualBasic2008AmandaSilver_138CC/clip_image002_thumb.jpg" width="628" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Note that projects you&amp;#8217;re upgrading, will automatically target .NET Framework 2.0 until you add references to .NET 3.0 or 3.5 assemblies. &lt;/p&gt;  &lt;h5&gt;&lt;b&gt;1) &lt;/b&gt;&lt;b&gt;Type Inference&lt;/b&gt;&lt;/h5&gt;  &lt;p&gt;In Visual Basic 9, in the following bit of code and NOTHING is late-bound &amp;#8211; everything is bound at compile-time which means you get Intellisense and type checking.&lt;/p&gt;  &lt;pre class="code"&gt;        &lt;span style="color: rgb(0,0,255)"&gt;Dim&lt;/span&gt; dialog = &lt;span style="color: rgb(0,0,255)"&gt;New&lt;/span&gt; OpenFileDialog()
        &lt;span style="color: rgb(0,0,255)"&gt;Dim&lt;/span&gt; result = dialog.ShowDialog()
        &lt;span style="color: rgb(0,0,255)"&gt;Dim&lt;/span&gt; printStr = &lt;span style="color: rgb(163,21,21)"&gt;&amp;quot;C:\&amp;quot;
&lt;/span&gt;        &lt;span style="color: rgb(0,0,255)"&gt;If&lt;/span&gt; result = Windows.Forms.DialogResult.OK &lt;span style="color: rgb(0,0,255)"&gt;Then
&lt;/span&gt;            printStr = dialog.FileName
        &lt;span style="color: rgb(0,0,255)"&gt;End&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;If
&lt;/span&gt;        MsgBox(printStr)&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;This makes prototyping very quick, easy, and type-safe! This feature and the mechanisms that control it are comprehensively covered in &lt;a href="http://msdn.microsoft.com/msdnmag/issues/07/10/BasicInstincts/default.aspx"&gt;this article by a member of our QA team, Bill Horst&lt;/a&gt;. &lt;/p&gt;

&lt;h5&gt;&lt;b&gt;2) &lt;/b&gt;&lt;b&gt;If Operator&lt;/b&gt;&lt;/h5&gt;

&lt;p&gt;Ever notice that the IIF function returns something of type Object? This means that you don&amp;#8217;t get Intellisense or type-checking by default on that result. For those of you that &lt;i&gt;insist&lt;/i&gt; on type-safe, early-bound code, you have to &lt;i&gt;cast&lt;/i&gt; the result. The code then looks something like this:&lt;/p&gt;

&lt;pre class="code"&gt;        &lt;span style="color: rgb(0,0,255)"&gt;Dim&lt;/span&gt; intC &lt;span style="color: rgb(0,0,255)"&gt;As&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;Integer&lt;/span&gt; = &lt;span style="color: rgb(0,0,255)"&gt;CInt&lt;/span&gt;(IIf(intA = intB, intA, intB - 1))&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;With the If operator, you can now write that line as:&lt;/p&gt;

&lt;pre class="code"&gt;        &lt;span style="color: rgb(0,0,255)"&gt;Dim&lt;/span&gt; intD &lt;span style="color: rgb(0,0,255)"&gt;As&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;Integer&lt;/span&gt; = &lt;span style="color: rgb(0,0,255)"&gt;If&lt;/span&gt;(intA = intB, intA, intB)&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;And with type inference it gets even easier on the eyes:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/HiddenGemsinVisualBasic2008AmandaSilver_138CC/clip_image004_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; margin: 0px 0px 0px 55px; border-left: 0px; border-bottom: 0px" height="61" alt="clip_image004" src="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/HiddenGemsinVisualBasic2008AmandaSilver_138CC/clip_image004_thumb.jpg" width="315" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm a fan of any feature that improves readability. &lt;/p&gt;

&lt;h5&gt;&lt;b&gt;3) &lt;/b&gt;&lt;b&gt;Object Initializers&lt;/b&gt;&lt;/h5&gt;

&lt;p&gt;Generally, in the .NET frameworks, we try to design APIs that use the &lt;a href="http://www.cs.cmu.edu/~NatProg/papers/Stylos2007CreateSetCall.pdf"&gt;create-set-call pattern&lt;/a&gt; as our usability studies have indicated they are the easiest to use by the average programmer. Nevertheless, objects that don&amp;#8217;t have a parameterless constructor exist in the .NET framework. When that happens, it&amp;#8217;s really nice to be able to leverage Object Initializers which are kind of like a Dim and a With statement combined into an expression. That makes parameterized constructors somewhat easier to tolerate:&lt;/p&gt;

&lt;pre class="code"&gt;        &lt;span style="color: rgb(0,0,255)"&gt;Dim&lt;/span&gt; strm &lt;span style="color: rgb(0,0,255)"&gt;As&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;New&lt;/span&gt; StreamWriter( _
                      &lt;span style="color: rgb(0,0,255)"&gt;New&lt;/span&gt; FileStream(&lt;span style="color: rgb(163,21,21)"&gt;&amp;quot;C:\out.txt&amp;quot;&lt;/span&gt;, FileMode.OpenOrCreate) _
                        &lt;span style="color: rgb(0,0,255)"&gt;With&lt;/span&gt; {.Position = 10})&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;It also makes creating arrays of objects much easier. &lt;/p&gt;

&lt;pre class="code"&gt;        &lt;span style="color: rgb(0,0,255)"&gt;Dim&lt;/span&gt; Capitals() &lt;span style="color: rgb(0,0,255)"&gt;As&lt;/span&gt; City = {&lt;span style="color: rgb(0,0,255)"&gt;New&lt;/span&gt; City &lt;span style="color: rgb(0,0,255)"&gt;With&lt;/span&gt; {.Name = &lt;span style="color: rgb(163,21,21)"&gt;&amp;quot;Antanarivo&amp;quot;&lt;/span&gt;, .Country = &lt;span style="color: rgb(163,21,21)"&gt;&amp;quot;Madagascar&amp;quot;&lt;/span&gt;}, _
          &lt;span style="color: rgb(0,0,255)"&gt;New&lt;/span&gt; City &lt;span style="color: rgb(0,0,255)"&gt;With&lt;/span&gt; {.Name = &lt;span style="color: rgb(163,21,21)"&gt;&amp;quot;Belmopan&amp;quot;&lt;/span&gt;, .Country = &lt;span style="color: rgb(163,21,21)"&gt;&amp;quot;Belize&amp;quot;&lt;/span&gt;}, _
          &lt;span style="color: rgb(0,0,255)"&gt;New&lt;/span&gt; City &lt;span style="color: rgb(0,0,255)"&gt;With&lt;/span&gt; {.Name = &lt;span style="color: rgb(163,21,21)"&gt;&amp;quot;Monaco&amp;quot;&lt;/span&gt;, .Country = &lt;span style="color: rgb(163,21,21)"&gt;&amp;quot;Monaco&amp;quot;&lt;/span&gt;}, _
          &lt;span style="color: rgb(0,0,255)"&gt;New&lt;/span&gt; City &lt;span style="color: rgb(0,0,255)"&gt;With&lt;/span&gt; {.Country = &lt;span style="color: rgb(163,21,21)"&gt;&amp;quot;Palau&amp;quot;&lt;/span&gt;, .Name = &lt;span style="color: rgb(163,21,21)"&gt;&amp;quot;Koror&amp;quot;&lt;/span&gt;}}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;

&lt;h5&gt;&lt;b&gt;4) &lt;/b&gt;&lt;b&gt;Nullable &lt;/b&gt;&lt;/h5&gt;

&lt;p&gt;Nullable is the feature you&amp;#8217;ll notice but rarely have to think about. It&amp;#8217;s basically the .NET representation for a Nullable &lt;a href="http://msdn2.microsoft.com/en-us/library/y23b5415(vs.71).aspx"&gt;value type&lt;/a&gt; (Integer, Date, etc.) Using the designer for LINQ to SQL, the Object-Relational Mapping layer introduced in Visual Studio 2008, nullable columns in your database are mapped to this type. The result is that you can write the following expression in VB and the &lt;i&gt;right thing happens &amp;#8211; &lt;/i&gt;null valued rows propagate null. In the example below, the Independence property on the Country type is a nullable date, denoted as &lt;span style="color: rgb(0,0,255)"&gt;Date&lt;/span&gt;?&lt;/p&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;pre class="code"&gt;        &lt;span style="color: rgb(0,0,255)"&gt;Dim&lt;/span&gt; virginIslands &lt;span style="color: rgb(0,0,255)"&gt;As&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;New&lt;/span&gt; Country &lt;span style="color: rgb(0,0,255)"&gt;With&lt;/span&gt; {.Independence = &lt;span style="color: rgb(0,0,255)"&gt;Nothing&lt;/span&gt;}
        &lt;span style="color: rgb(0,0,255)"&gt;Dim&lt;/span&gt; palau &lt;span style="color: rgb(0,0,255)"&gt;As&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;New&lt;/span&gt; Country &lt;span style="color: rgb(0,0,255)"&gt;With&lt;/span&gt; {.Independence = #10/1/1994#}

        &lt;span style="color: rgb(0,0,255)"&gt;Dim&lt;/span&gt; vILength = #8/24/2005# - virginIslands.Independence &lt;span style="color: rgb(0,128,0)"&gt;' Nothing
&lt;/span&gt;        &lt;span style="color: rgb(0,0,255)"&gt;Dim&lt;/span&gt; pLength = #8/24/2005# - palau.Independence &lt;span style="color: rgb(0,128,0)"&gt;' 3980.00:00:00&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;

&lt;h5&gt;&lt;b&gt;5) &lt;/b&gt;&lt;b&gt;LINQ to DataSet &lt;/b&gt;&lt;/h5&gt;

&lt;p&gt;I love this feature because it means never having to say you&amp;#8217;re sorry&amp;#8230; No, really, it means that you don&amp;#8217;t need to migrate to a new data access technology to reap the benefits of LINQ. I fill my DataSet just as before, and then I can query against the DataSet:&lt;/p&gt;

&lt;pre class="code"&gt;        &lt;span style="color: rgb(0,0,255)"&gt;Me&lt;/span&gt;.EmployeesTableAdapter.Fill(&lt;span style="color: rgb(0,0,255)"&gt;Me&lt;/span&gt;.NORTHWNDDataSet.Employees)
        &lt;span style="color: rgb(0,0,255)"&gt;Dim&lt;/span&gt; query = &lt;span style="color: rgb(0,0,255)"&gt;From&lt;/span&gt; emp &lt;span style="color: rgb(0,0,255)"&gt;In&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;Me&lt;/span&gt;.NORTHWNDDataSet.Employees _
                    &lt;span style="color: rgb(0,0,255)"&gt;Where&lt;/span&gt; emp.Country = &lt;span style="color: rgb(163,21,21)"&gt;&amp;quot;USA&amp;quot;&lt;/span&gt; _
                    &lt;span style="color: rgb(0,0,255)"&gt;Order&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;By&lt;/span&gt; emp.HireDate _
                    &lt;span style="color: rgb(0,0,255)"&gt;Select&lt;/span&gt; emp
        &lt;span style="color: rgb(0,0,255)"&gt;Me&lt;/span&gt;.EmployeesBindingSource.DataSource = query&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;

&lt;h5&gt;&lt;b&gt;6) &lt;/b&gt;&lt;b&gt;Syntax Tooltips&lt;/b&gt;&lt;/h5&gt;

&lt;p&gt;How cool is this?&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/HiddenGemsinVisualBasic2008AmandaSilver_138CC/clip_image006_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="200" alt="clip_image006" src="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/HiddenGemsinVisualBasic2008AmandaSilver_138CC/clip_image006_thumb.jpg" width="382" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;How about this?&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/HiddenGemsinVisualBasic2008AmandaSilver_138CC/clip_image008_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="100" alt="clip_image008" src="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/HiddenGemsinVisualBasic2008AmandaSilver_138CC/clip_image008_thumb.jpg" width="319" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What do you think of this?&lt;/p&gt;

&lt;p&gt;&lt;b&gt;&lt;a href="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/HiddenGemsinVisualBasic2008AmandaSilver_138CC/clip_image010_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="82" alt="clip_image010" src="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/HiddenGemsinVisualBasic2008AmandaSilver_138CC/clip_image010_thumb.jpg" width="450" border="0" /&gt;&lt;/a&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;

&lt;h5&gt;&lt;b&gt;7) &lt;/b&gt;&lt;b&gt;XML Namespace support in Intellisense&lt;/b&gt;&lt;/h5&gt;

&lt;p&gt;We&amp;#8217;ve &lt;a href="http://blogs.msdn.com/vbteam/archive/2007/06/06/visual-basic-xml-transform-teched-demo-prep.aspx"&gt;blogged&lt;/a&gt; about &lt;a href="http://msdn2.microsoft.com/en-us/library/bb531325(VS.90).aspx"&gt;XML Intellisense&lt;/a&gt; before. But there&amp;#8217;s a tidbit we&amp;#8217;ve overlooked. &lt;/p&gt;

&lt;p&gt;When namespaces are used in the XML document you&amp;#8217;re reading from, the Intellisense engine matches the namespace prefix and the local name. This little productivity boost can yield a significant savings in keystrokes. Instead of typing the prefix then the colon and then the local name, you just type a little bit of the local name and hit enter. Here is a small example of how it works, starting with an input document and the applicable intellisense:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/HiddenGemsinVisualBasic2008AmandaSilver_138CC/clip_image012_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="259" alt="clip_image012" src="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/HiddenGemsinVisualBasic2008AmandaSilver_138CC/clip_image012_thumb.jpg" width="534" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If we just type the letter &amp;#8220;t&amp;#8221; the &amp;#8220;tomato&amp;#8221; entry will be selected:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/HiddenGemsinVisualBasic2008AmandaSilver_138CC/clip_image014_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="61" alt="clip_image014" src="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/HiddenGemsinVisualBasic2008AmandaSilver_138CC/clip_image014_thumb.jpg" width="363" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If we type the letter &amp;#8220;e&amp;#8221; the &amp;#8220;exa:eggplant&amp;#8221; will be selected and the completion list will &lt;i&gt;also&lt;/i&gt; contain the prefix &amp;#8220;exa&amp;#8221; and the &amp;#8220;elephant&amp;#8221; entry:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/HiddenGemsinVisualBasic2008AmandaSilver_138CC/clip_image016_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="96" alt="clip_image016" src="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/HiddenGemsinVisualBasic2008AmandaSilver_138CC/clip_image016_thumb.jpg" width="373" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt; The next character that will be typed will determine which single entry will get selected. Now, how easy was that?&lt;/p&gt;

&lt;h5&gt;&lt;/h5&gt;

&lt;h5&gt;&lt;b&gt;8) &lt;/b&gt;&lt;b&gt;GoTo Type Definition&lt;/b&gt;&lt;/h5&gt;

&lt;p&gt;Often, when you define a variable, you want to view the type definition in code or in the Object Browser. There&amp;#8217;s a new option in the context menu which allows you to go directly to the type definition instead of just the variable declaration. This is great when combined with type inference as it allows you confirm that the type of the variable is actually what you believe it to be. &lt;/p&gt;

&lt;p&gt;&lt;b&gt;&lt;a href="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/HiddenGemsinVisualBasic2008AmandaSilver_138CC/clip_image018_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="172" alt="clip_image018" src="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/HiddenGemsinVisualBasic2008AmandaSilver_138CC/clip_image018_thumb.jpg" width="381" border="0" /&gt;&lt;/a&gt;&lt;/b&gt; &lt;b&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;

&lt;h5&gt;&lt;b&gt;9) &lt;/b&gt;&lt;b&gt;Type inference for loop variables&lt;/b&gt;&lt;/h5&gt;

&lt;p&gt;Check out the following code:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/HiddenGemsinVisualBasic2008AmandaSilver_138CC/clip_image020_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="112" alt="clip_image020" src="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/HiddenGemsinVisualBasic2008AmandaSilver_138CC/clip_image020_thumb.jpg" width="482" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And this code:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/HiddenGemsinVisualBasic2008AmandaSilver_138CC/clip_image022_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="117" alt="clip_image022" src="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/HiddenGemsinVisualBasic2008AmandaSilver_138CC/clip_image022_thumb.jpg" width="346" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Without having to specify the type of the control variable, it&amp;#8217;s inferred from right-hand-side expression or the collection we&amp;#8217;re iterating over. &lt;/p&gt;

&lt;h5&gt;&lt;b&gt;10) &lt;/b&gt;&lt;b&gt;Performance improvements and&amp;#8230; Non-blocking operations!&lt;/b&gt;&lt;/h5&gt;

&lt;p&gt;The background compiler is an &lt;i&gt;awesome&lt;/i&gt; feature that gives you immediate feedback on the correctness of the code you write. We&amp;#8217;ve made some &lt;i&gt;&lt;a href="http://channel9.msdn.com/ShowPost.aspx?PostID=328382#328382"&gt;tremendous&lt;/a&gt;&lt;/i&gt; strides in the performance of the background compiler in this release. We believe that the background compiler is 3 times faster uses 3 times less memory. Anyone who has migrated their project to 2008 should notice an improvement after a couple minutes of use.&lt;/p&gt;

&lt;p&gt;While we&amp;#8217;ve made huge improvements on the throughput, certain operations like changing the declaration of a base class that&amp;#8217;s used many times in a large project is computationally expensive. If you attempted to invoke a feature that relied on compiled information before the background compiler has a chance to do its magic, like Intellisense or the Drop Downs, previous versions of Visual Studio would grind to a halt until the compilation was complete. Those operations are no-longer blocking. So, while you might occasionally get the drop downs to look like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/HiddenGemsinVisualBasic2008AmandaSilver_138CC/clip_image024_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="45" alt="clip_image024" src="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/HiddenGemsinVisualBasic2008AmandaSilver_138CC/clip_image024_thumb.jpg" width="268" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The IDE will still be responsive. &lt;b&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Now do you have to &lt;a href="http://msdn2.microsoft.com/en-us/vstudio/products/aa700831.aspx"&gt;download it&lt;/a&gt;? Remember, you can always grab the &lt;a href="http://www.microsoft.com/express/"&gt;Express&lt;/a&gt; Edition!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6450618" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/vbteam/archive/tags/Amanda+Silver/default.aspx">Amanda Silver</category><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/IDE/default.aspx">IDE</category><category domain="http://blogs.msdn.com/vbteam/archive/tags/VB_5F00_Express/default.aspx">VB_Express</category><category domain="http://blogs.msdn.com/vbteam/archive/tags/VB2008/default.aspx">VB2008</category><category domain="http://blogs.msdn.com/vbteam/archive/tags/IQueryable/default.aspx">IQueryable</category></item><item><title>Visual Basic 2008 Ships!!! (Amanda Silver)</title><link>http://blogs.msdn.com/vbteam/archive/2007/11/19/visual-basic-2008-ships.aspx</link><pubDate>Mon, 19 Nov 2007 20:27:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6405290</guid><dc:creator>VBTeam</dc:creator><slash:comments>9</slash:comments><comments>http://blogs.msdn.com/vbteam/comments/6405290.aspx</comments><wfw:commentRss>http://blogs.msdn.com/vbteam/commentrss.aspx?PostID=6405290</wfw:commentRss><description>&lt;p&gt;Hooray! Today we&amp;#8217;ve finally &lt;i&gt;shipped &lt;/i&gt;Visual Studio 2008, previously known as &amp;#8220;Orcas&amp;#8221;, previously known as some symbol which doesn&amp;#8217;t have an ascii representation. We&amp;#8217;ve &lt;a href="http://www.idealliance.org/proceedings/xml05/ship/247/VisualBasic9.PDF" mce_href="http://www.idealliance.org/proceedings/xml05/ship/247/VisualBasic9.PDF"&gt;come a long way&lt;/a&gt;, but it&amp;#8217;s been a great ride. In his &lt;a href="http://blogs.msdn.com/somasegar/archive/2007/11/19/visual-studio-2008-and-net-framework-3-5-shipped.aspx" mce_href="http://blogs.msdn.com/somasegar/archive/2007/11/19/visual-studio-2008-and-net-framework-3-5-shipped.aspx"&gt;blog&lt;/a&gt;, Soma mentions many of the flagship features at a high-level that will undoubtedly make the every developer and head of IT salivate, but this blog is about Visual Basic. :)&lt;/p&gt;  &lt;p&gt;This is a &lt;b&gt;&lt;i&gt;tremendous&lt;/i&gt;&lt;/b&gt; release for Visual Basic users everywhere as it&amp;#8217;s the first to introduce query expressions and XML as a first class data-type. Not only does this make Visual Basic the most productive choice for programming data-centric applications, it also makes us VB developers the &lt;i&gt;envy&lt;/i&gt; of many an &lt;a href="http://www.pluralsight.com/blogs/dbox/" mce_href="http://www.pluralsight.com/blogs/dbox/"&gt;alpha-geek&lt;/a&gt;. If you'd like to just try it out -- be sure to check out &lt;a href="http://www.microsoft.com/express/"&gt;Visual Basic Express&lt;/a&gt; which comes with all the features I talk about below.&lt;/p&gt;  &lt;p&gt;With query the entire .NET frameworks become a queryable data source. You can now query against anything available in the .NET Frameworks &amp;#8211; the registry, file system, live processes, etc. For example, the code below queries against the running processes and returns those with a thread count greater than 10, orders them by the thread count:&lt;/p&gt;  &lt;pre class="code"&gt;        &lt;span style="color: rgb(0,0,255)"&gt;Dim&lt;/span&gt; query = &lt;span style="color: rgb(0,0,255)"&gt;From&lt;/span&gt; proc &lt;span style="color: rgb(0,0,255)"&gt;In&lt;/span&gt; Process.GetProcesses _
            &lt;span style="color: rgb(0,0,255)"&gt;Let&lt;/span&gt; ThreadCount = proc.Threads.Count _
            &lt;span style="color: rgb(0,0,255)"&gt;Where&lt;/span&gt; ThreadCount &amp;gt; 10 _
            &lt;span style="color: rgb(0,0,255)"&gt;Order&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;By&lt;/span&gt; ThreadCount _
            &lt;span style="color: rgb(0,0,255)"&gt;Select&lt;/span&gt; proc.ProcessName, proc.Id, ThreadCount&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p align="left"&gt;Using the LINQ to SQL Object-Relational Mapping framework, you can query against a SQL database as though it was just another collection of objects exposed by the frameworks. The following query finds all the products that have been discontinued, groups them into categories, and finds the total number of units in stock for each category:&lt;/p&gt;

&lt;pre class="code"&gt;        &lt;span style="color: rgb(0,0,255)"&gt;Dim&lt;/span&gt; db &lt;span style="color: rgb(0,0,255)"&gt;As&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;New&lt;/span&gt; NorthwindDataContext(&lt;span style="color: rgb(0,0,255)"&gt;My&lt;/span&gt;.Settings.NORTHWNDConnectionString)
        &lt;span style="color: rgb(0,0,255)"&gt;Dim&lt;/span&gt; query = &lt;span style="color: rgb(0,0,255)"&gt;From&lt;/span&gt; prod &lt;span style="color: rgb(0,0,255)"&gt;In&lt;/span&gt; db.Products _
                    &lt;span style="color: rgb(0,0,255)"&gt;Where&lt;/span&gt; prod.Discontinued = &lt;span style="color: rgb(0,0,255)"&gt;True&lt;/span&gt; _
                    &lt;span style="color: rgb(0,0,255)"&gt;Group&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;By&lt;/span&gt; prod.CategoryID _
                    &lt;span style="color: rgb(0,0,255)"&gt;Into&lt;/span&gt; Count(), NumInStock = Sum(prod.UnitsInStock) _
                    &lt;span style="color: rgb(0,0,255)"&gt;Join&lt;/span&gt; cat &lt;span style="color: rgb(0,0,255)"&gt;In&lt;/span&gt; db.Categories &lt;span style="color: rgb(0,0,255)"&gt;On&lt;/span&gt; cat.CategoryID &lt;span style="color: rgb(0,0,255)"&gt;Equals&lt;/span&gt; CategoryID _
                    &lt;span style="color: rgb(0,0,255)"&gt;Select&lt;/span&gt; cat.CategoryName, Count, NumInStock&lt;/pre&gt;

&lt;p&gt;Unlike writing huge SQL query strings, I get immediate feedback on the query I write. &lt;/p&gt;

&lt;p&gt;&lt;b&gt;&lt;i&gt;Intellisense&lt;/i&gt;&lt;/b&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/VisualBasic2008Ships_84BD/clip_image002_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/VisualBasic2008Ships_84BD/clip_image002_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="245" alt="clip_image002" src="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/VisualBasic2008Ships_84BD/clip_image002_thumb.jpg" width="616" border="0" mce_src="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/VisualBasic2008Ships_84BD/clip_image002_thumb.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;&lt;i&gt;Syntax checking:&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/VisualBasic2008Ships_84BD/clip_image004_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/VisualBasic2008Ships_84BD/clip_image004_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="78" alt="clip_image004" src="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/VisualBasic2008Ships_84BD/clip_image004_thumb.jpg" width="628" border="0" mce_src="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/VisualBasic2008Ships_84BD/clip_image004_thumb.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;&lt;i&gt;Schema checking:&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;&lt;i&gt;&lt;a href="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/VisualBasic2008Ships_84BD/clip_image006_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/VisualBasic2008Ships_84BD/clip_image006_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="136" alt="clip_image006" src="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/VisualBasic2008Ships_84BD/clip_image006_thumb.jpg" width="611" border="0" mce_src="http://blogs.msdn.com/blogfiles/vbteam/WindowsLiveWriter/VisualBasic2008Ships_84BD/clip_image006_thumb.jpg" /&gt;&lt;/a&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;I can use the same query language (VB!) to query against relational databases, XML, and collections of objects &amp;#8211; I don&amp;#8217;t need to learn any domain specific language, VB gives me access to all! It&amp;#8217;s really easy for me to join across domains (I&amp;#8217;ll take that up in a later blog post.) &lt;/p&gt;

&lt;p&gt;With XML as a first class data-type, &lt;a href="http://blogs.msdn.com/vbteam/archive/2007/06/06/visual-basic-xml-transform-teched-demo-prep.aspx" mce_href="http://blogs.msdn.com/vbteam/archive/2007/06/06/visual-basic-xml-transform-teched-demo-prep.aspx"&gt;Visual Basic becomes a full XML transform language&lt;/a&gt;. But it&amp;#8217;s also really easy for me to project to XML from my SQL database:&lt;/p&gt;

&lt;pre class="code"&gt;        &lt;span style="color: rgb(0,0,255)"&gt;Dim&lt;/span&gt; query = &lt;span style="color: rgb(0,0,255)"&gt;From&lt;/span&gt; prod &lt;span style="color: rgb(0,0,255)"&gt;In&lt;/span&gt; db.Products _
            &lt;span style="color: rgb(0,0,255)"&gt;Where&lt;/span&gt; prod.Discontinued = &lt;span style="color: rgb(0,0,255)"&gt;True&lt;/span&gt; _
            &lt;span style="color: rgb(0,0,255)"&gt;Group&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;By&lt;/span&gt; prod.CategoryID _
            &lt;span style="color: rgb(0,0,255)"&gt;Into&lt;/span&gt; prodGroup = &lt;span style="color: rgb(0,0,255)"&gt;Group&lt;/span&gt;, NumInStock = Sum(prod.UnitsInStock) _
            &lt;span style="color: rgb(0,0,255)"&gt;Join&lt;/span&gt; cat &lt;span style="color: rgb(0,0,255)"&gt;In&lt;/span&gt; db.Categories &lt;span style="color: rgb(0,0,255)"&gt;On&lt;/span&gt; cat.CategoryID &lt;span style="color: rgb(0,0,255)"&gt;Equals&lt;/span&gt; CategoryID _
            &lt;span style="color: rgb(0,0,255)"&gt;Select&lt;/span&gt; &lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(132,70,70)"&gt;Products&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;
&lt;/span&gt;                       &lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(132,70,70)"&gt;Category&lt;/span&gt; &lt;span style="color: rgb(185,100,100)"&gt;CategoryID&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;=&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&lt;span style="background: rgb(255,254,191)"&gt;&amp;lt;%=&lt;/span&gt;&lt;/span&gt; CategoryID &lt;span style="color: rgb(85,85,85)"&gt;&lt;span style="background: rgb(255,254,191)"&gt;%&amp;gt;&lt;/span&gt;&lt;/span&gt; &lt;span style="color: rgb(185,100,100)"&gt;CategoryName&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;=&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&lt;span style="background: rgb(255,254,191)"&gt;&amp;lt;%=&lt;/span&gt;&lt;/span&gt; cat.CategoryName &lt;span style="color: rgb(85,85,85)"&gt;&lt;span style="background: rgb(255,254,191)"&gt;%&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;&lt;/span&gt;&amp;gt;
&lt;/span&gt;                           &lt;span style="color: rgb(85,85,85)"&gt;&lt;span style="background: rgb(255,254,191)"&gt;&amp;lt;%=&lt;/span&gt;&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;From&lt;/span&gt; prod &lt;span style="color: rgb(0,0,255)"&gt;In&lt;/span&gt; prodGroup _
                               &lt;span style="color: rgb(0,0,255)"&gt;Select&lt;/span&gt; &lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(132,70,70)"&gt;Product&lt;/span&gt; &lt;span style="color: rgb(185,100,100)"&gt;Price&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;=&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&lt;span style="background: rgb(255,254,191)"&gt;&amp;lt;%=&lt;/span&gt;&lt;/span&gt; prod.UnitPrice &lt;span style="color: rgb(85,85,85)"&gt;&lt;span style="background: rgb(255,254,191)"&gt;%&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&lt;span style="background: rgb(255,254,191)"&gt;&amp;lt;%=&lt;/span&gt;&lt;/span&gt; prod.ProductName &lt;span style="color: rgb(85,85,85)"&gt;&lt;span style="background: rgb(255,254,191)"&gt;%&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;&lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(132,70,70)"&gt;Product&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: rgb(85,85,85)"&gt;&lt;span style="background: rgb(255,254,191)"&gt;%&amp;gt;
&lt;/span&gt;&lt;/span&gt;                       &lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(132,70,70)"&gt;Category&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;
&lt;/span&gt;                   &lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(132,70,70)"&gt;Products&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;Last but not least, for those of you who aren&amp;#8217;t so excited about the LINQ (Language INtegrated Query) project, Visual Basic 2008 comes with a tremendous &lt;a href="http://channel9.msdn.com/ShowPost.aspx?PostID=334318" mce_href="http://channel9.msdn.com/ShowPost.aspx?PostID=334318"&gt;improvement in the Intellisense&lt;/a&gt; experience overall. One of our MVPs said that he literally types two characters and hits tab, two characters, tab &amp;#8211; it&amp;#8217;s as though the code writes itself!&lt;/p&gt;

&lt;p&gt;Obviously, we&amp;#8217;re &lt;i&gt;very&lt;/i&gt; excited about this release and hope it meets you with open arms eager to embrace the productivity! If you're ready to go to the next level and dig in, be sure to check out our &lt;a href=" http://msdn2.microsoft.com/en-us/bb931185.aspx"&gt;learning pages&lt;/a&gt; and &lt;a href="http://msdn2.microsoft.com/en-us/vbasic/bb466226.aspx"&gt;How-Do-I videos&lt;/a&gt; which walk you through these features and so much more. &lt;/p&gt;

&lt;p&gt;Tomorrow I&amp;#8217;ll blog about the least often mentioned goodies hidden in Visual Basic 2008 so that you can become the guru master of VB9. &amp;#8216;Til then&amp;#8230; &lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6405290" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/vbteam/archive/tags/Amanda+Silver/default.aspx">Amanda Silver</category><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/IDE/default.aspx">IDE</category><category domain="http://blogs.msdn.com/vbteam/archive/tags/VB_5F00_Express/default.aspx">VB_Express</category><category domain="http://blogs.msdn.com/vbteam/archive/tags/Visual+Basic+History/default.aspx">Visual Basic History</category><category domain="http://blogs.msdn.com/vbteam/archive/tags/VB2008/default.aspx">VB2008</category><category domain="http://blogs.msdn.com/vbteam/archive/tags/LINQ+Cookbook/default.aspx">LINQ Cookbook</category><category domain="http://blogs.msdn.com/vbteam/archive/tags/IQueryable/default.aspx">IQueryable</category></item><item><title>Creating Visual Basic Add-ins for Windows Home Server (Beth Massi)</title><link>http://blogs.msdn.com/vbteam/archive/2007/11/08/creating-visual-basic-add-ins-for-windows-home-server-beth-massi.aspx</link><pubDate>Thu, 08 Nov 2007 22:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5992369</guid><dc:creator>VBTeam</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/vbteam/comments/5992369.aspx</comments><wfw:commentRss>http://blogs.msdn.com/vbteam/commentrss.aspx?PostID=5992369</wfw:commentRss><description>&lt;P&gt;﻿We recently announced the availability of &lt;A href="http://www.microsoft.com/windows/products/winfamily/windowshomeserver/default.mspx"&gt;Windows Home Server&lt;/A&gt;. Here's &lt;A class="" href="http://channel9.msdn.com/ShowPost.aspx?PostID=354105" target=_blank mce_href="http://channel9.msdn.com/ShowPost.aspx?PostID=354105"&gt;an interview on Channel 9&lt;/A&gt; with Dev Lead, Chris Gray, where he talks about the extensibility model and then walks through how to create an add-in for the Home Server console using&amp;nbsp;&lt;A class="" href="http://msdn2.microsoft.com/en-us/express/aa718406.aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/express/aa718406.aspx"&gt;Visual Basic Express&lt;/A&gt;. A couple&amp;nbsp;people on the thread have also posted VB templates that you may find useful. &lt;A class="" href="http://channel9.msdn.com/ShowPost.aspx?PostID=354555" target=_blank mce_href="http://channel9.msdn.com/ShowPost.aspx?PostID=354555"&gt;Get Chris's code here&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Enjoy,&lt;BR&gt;-&lt;A class="" href="http://blogs.msdn.com/bethmassi/" target=_blank mce_href="http://blogs.msdn.com/bethmassi/"&gt;Beth Massi&lt;/A&gt;, VS Community&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5992369" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/vbteam/archive/tags/VB_5F00_Express/default.aspx">VB_Express</category><category domain="http://blogs.msdn.com/vbteam/archive/tags/Beth+Massi/default.aspx">Beth Massi</category></item><item><title>Sons and Daughters Day: a pure blast!</title><link>http://blogs.msdn.com/vbteam/archive/2007/07/15/sons-and-daughters-day-a-pure-blast.aspx</link><pubDate>Mon, 16 Jul 2007 02:35:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3885153</guid><dc:creator>VBTeam</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/vbteam/comments/3885153.aspx</comments><wfw:commentRss>http://blogs.msdn.com/vbteam/commentrss.aspx?PostID=3885153</wfw:commentRss><description>&lt;P class=MsoNormal&gt;On Friday, Chris Smith and I (Chris is a test engineer&amp;nbsp;on the VB Team)&amp;nbsp;attended an event called 'Sons and Daughters' day. The day consisted of 2 sessions (20-25 kids in each) where kids aged 6-13 were run through a class of writing an app in VB (20-25 kids in each). The class was very introductory, but eas very appropriate for the audience. Parents typically hung out with their kids to help things along. The role Chris and I played was to be additional helpers, to be able to provide extra assistance as necessary (parents were typically good at helping their kids along, but the odd issue or question wuld arise that needed extra help). Of course, the target version of VS was VB Express.&lt;/P&gt;
&lt;P class=MsoNormal&gt;Talk about FUN!&lt;/P&gt;
&lt;P class=MsoNormal&gt;I was concerned going in that it would be hard to lower the bar enough to let people use the product for the age of the audience. But the combination of the following meant that pretty much everyone had a great day. The feedback was all positive, and some kids clearly had the time of their lives. But our product really is pretty darn easy to use. I sometimes forget that getting started with Express really is easy. I had this nagging feeling that people would have to know more about what was going on for the day to be successful. But the presenter (&lt;FONT face=Tahoma&gt;Robin Reynolds-Haertle) did a great job at preparing the material, and targeting it well for the day. She basically showed people the environment, got them to make a winfors app, add a control, change properties and add some code. From there, she had a project for people to start with that was a simple game, but demonstrated a few more concepts. Straightforward, but esential, and fun stuff.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Tahoma&gt;It didn't hurt that the kids were all enthusiastic, and the parents engaged well ;-).&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;My highlights of the day:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal&gt;I don’t know if you remember that time (and I’m sure it happens for all of us) when you write an app and you get this ‘jolt’ of excitement because you literally see the program do &lt;I&gt;yourcode&lt;/I&gt;. I saw that jolt all over the place today. The first app of course, is to drop a button on a form, and put a msgbox(“Hello World!”) behind it. There were audible cries of&amp;nbsp;‘wow, awesome!’ all around the room for this step. That’s the jolt, and I just love seeing that. Even more, I’d suggest to the odd person they should change it to be their name such as “Hello, Sarah!”. This gets an even bigger grin&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal&gt;&lt;SPAN&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;The first person I helped out was a young boy about age 8. As soon as I arrived, he matter of factly said ‘I can’t type, I need you to walk me through this’. So I did. All the way down to how to type in a double-quote (which he could barely manage with one hand: he had to contort his small fingers to get the combo right,&amp;nbsp;but he seemed to insist on doing it because his neighboring pupil did it that way). This kid was completely aware of what he could and couldn’t do,&amp;nbsp;talk about a good pupil&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal&gt;One girl was very excited about her app, and proudly showed it off to Chris. It had two buttons, with different colors and different Msgbox’s. The message on one of the msgbox’s was very professional. Chris, giving an appropriately enthusiastic response stated “That’s awesome! You could SELL that!”. To which the young girl, in complete earnestness responded ‘I KNOW!!!’. Bring on the money&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal&gt;One of the apps was a ‘fortune teller’ which got the children to click on three buttons (color, age, favorite number) and then gave a string as a ‘fortune’ (“Be happy” for example). The kids were encouraged to change the strings displayed. One child’s frank appraisal of the extremes of fortunes appealed to my own sensibilities. He wrote as one fortune ‘You wil get 1,000,000’ and as another ‘you will be poor’. His next was “You will get the measles”. Lucky thing I went to the doctor that morning&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P class=MsoListParagraph style="TEXT-INDENT: -0.25in"&gt;&lt;SPAN&gt;-&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;On a whim, I decided to show them my space invaders game at the end of each session, just to hammer home ‘this is where you can get to, you have the basics!’. This went over well of course.&lt;/P&gt;
&lt;P class=MsoNormal&gt;Some issues for me to raise with the team:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal&gt;By far, the most annoying issue throughout the day, is that its REALLY hard to see when the designer is in ‘run’ mode. Many, MANY times, a child, and/or parent would be blocked, and arriving to help out, it’s often not immediately obvious to us even, what’s wrong. We need to better differentiate when the app is running. And if you try to do actions in the designer, we need to make it more obvious that the designer can’t because it’s in run mode!&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal&gt;If you change the available drives, after you’ve opened save all, it doesn’t refresh. Not a major issue, but came up at least 10-11 times today, because of the way the lab was run (kids would be told to open the screen to save the app, and plugin the thumb drive to save the app to. Having done that, the save project dialog wouldn’t have the thumb drive listed, you’d have to close the dialog, and do it over. This was not at all clear when looking at the dialog)&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal&gt;Line continuation character with a space, could be pretty listed to do the right thing&amp;nbsp;&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P class=MsoNormal&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If you have code like "SomeMethod(Arg1,_&amp;nbsp;" it doesn’t get pretty listed, it just gets an error. This hit a couple of kids&lt;/P&gt;
&lt;P class=MsoNormal mce_keep="true"&gt;Thanks very much to April Reagan and the other organizers, this was a very fun day. I look forward to doing these more often!&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3885153" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/vbteam/archive/tags/Kit+George/default.aspx">Kit George</category><category domain="http://blogs.msdn.com/vbteam/archive/tags/VB_5F00_Express/default.aspx">VB_Express</category><category domain="http://blogs.msdn.com/vbteam/archive/tags/VB2005/default.aspx">VB2005</category></item><item><title>AmandaS' LINQ talk at VSLive Orlando</title><link>http://blogs.msdn.com/vbteam/archive/2007/05/07/linq-talk-at-vslive-orlando.aspx</link><pubDate>Tue, 08 May 2007 08:21:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2474567</guid><dc:creator>VBTeam</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/vbteam/comments/2474567.aspx</comments><wfw:commentRss>http://blogs.msdn.com/vbteam/commentrss.aspx?PostID=2474567</wfw:commentRss><description>&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'; mso-bidi-font-family: Arial; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"&gt;&lt;FONT size=3&gt;I escaped from Redmond this week to present at &lt;/FONT&gt;&lt;A href="http://www.ftponline.com/conferences/vslive/2007/orlando/" mce_href="http://www.ftponline.com/conferences/vslive/2007/orlando/"&gt;&lt;FONT size=3&gt;VSLive Orlando&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt; on LINQ in Visual Studio Orcas. As promised, please find the slides and demos included as an attachment below. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'; mso-bidi-font-family: Arial; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"&gt;&lt;FONT size=3&gt;As mentioned during the talk – that was intended to be an overview. If you want really want to understand the nitty-gritty details behind what make LINQ possible, be certain to tune into my &lt;/FONT&gt;&lt;A href="http://www.microsoft.com/events/EventDetails.aspx?CMTYSvcSource=MSCOMMedia&amp;amp;Params=%7eCMTYDataSvcParams%5e%7earg+Name%3d%22ID%22+Value%3d%221032332489%22%2f%5e%7earg+Name%3d%22ProviderID%22+Value%3d%22A6B43178-497C-4225-BA42-DF595171F04C%22%2f%5e%7earg+Name" mce_href="http://www.microsoft.com/events/EventDetails.aspx?CMTYSvcSource=MSCOMMedia&amp;amp;Params=%7eCMTYDataSvcParams%5e%7earg+Name%3d%22ID%22+Value%3d%221032332489%22%2f%5e%7earg+Name%3d%22ProviderID%22+Value%3d%22A6B43178-497C-4225-BA42-DF595171F04C%22%2f%5e%7earg+Name"&gt;&lt;FONT size=3&gt;LINQ Deep Dive&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt; &lt;/FONT&gt;&lt;A href="http://msdn2.microsoft.com/en-us/vbasic/aa727125.aspx" mce_href="http://msdn2.microsoft.com/en-us/vbasic/aa727125.aspx"&gt;&lt;FONT size=3&gt;WebCast&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt; on May 23&lt;SUP&gt;rd&lt;/SUP&gt;. If you’d like me to go into something specific during the webcast, just respond to this post. I can’t promise to get to everything in the webcast itself, but I do promise to answer any LINQ related questions in response to this post or the webcast. Be sure to pose questions to the LINQ forum if you think others might be able to help or have the same question. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'; mso-bidi-font-family: Arial; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"&gt;&lt;FONT size=3&gt;&lt;IMG title="Billy Hollis and Amanda Silver talking about the future of Visual Basic over a lemonade" style="WIDTH: 320px; HEIGHT: 240px" height=240 alt="Billy Hollis and Amanda Silver talking about the future of Visual Basic over a lemonade" hspace=20 src="http://blogs.msdn.com/photos/vbteam/images/2474795/original.aspx" width=320 align=left vspace=10 mce_src="http://blogs.msdn.com/photos/vbteam/images/2474795/original.aspx"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'; mso-bidi-font-family: Arial; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"&gt;&lt;FONT size=3&gt;I had a great time at &lt;/FONT&gt;&lt;A href="http://www.ftponline.com/conferences/vslive/2007/orlando/" mce_href="http://www.ftponline.com/conferences/vslive/2007/orlando/"&gt;&lt;FONT size=3&gt;VSLive&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt; today, I hope you enjoyed it as much as I did. I’m looking forward to &lt;/FONT&gt;&lt;A href="http://www.microsoft.com/events/teched2007/default.mspx" mce_href="http://www.microsoft.com/events/teched2007/default.mspx"&gt;&lt;FONT size=3&gt;TechEd&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt;!&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2474567" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/vbteam/attachment/2474567.ashx" length="1894118" type="application/x-zip-compressed" /><category domain="http://blogs.msdn.com/vbteam/archive/tags/Amanda+Silver/default.aspx">Amanda Silver</category><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/IDE/default.aspx">IDE</category><category domain="http://blogs.msdn.com/vbteam/archive/tags/VB_5F00_Express/default.aspx">VB_Express</category></item><item><title>Working with Shortcut Keys  (Lisa Feigenbaum)</title><link>http://blogs.msdn.com/vbteam/archive/2007/04/25/working-with-shortcut-keys-lisa-feigenbaum.aspx</link><pubDate>Wed, 25 Apr 2007 11:26:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2269391</guid><dc:creator>VBTeam</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/vbteam/comments/2269391.aspx</comments><wfw:commentRss>http://blogs.msdn.com/vbteam/commentrss.aspx?PostID=2269391</wfw:commentRss><description>&lt;P&gt;Since we have so&amp;nbsp;many&amp;nbsp;Orcas posts&amp;nbsp;going up on this blog, I've decided to continue with a few that you can use TODAY in Visual Studio 2005.&amp;nbsp; This one is about working with shortcut keys...&lt;/P&gt;
&lt;P&gt;For those of you using the Visual Basic Development Settings, your keyboard scheme&amp;nbsp;is set to&amp;nbsp;Visual Basic 6 by default.&amp;nbsp; You can verify this by checking the setting in Tools-&amp;gt;Options-&amp;gt;Environment-&amp;gt;Keyboard.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#008000&gt;The complete list of keyboard shortcuts for the currently bound commands in the VB6 scheme is located &lt;/FONT&gt;&lt;/STRONG&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/6k5ah8a8"&gt;&lt;STRONG&gt;&lt;FONT color=#003399&gt;here&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/A&gt;&lt;STRONG&gt;.&amp;nbsp; &lt;FONT color=#008000&gt;(Note: This is also a good source for command descriptions.)&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Once you have this initial set of keyboard shortcuts, there are a number of things you might want to do...&amp;nbsp; You might want to change the shortcut for an existing binding; you might want to add a shortcut for a command that does not yet have one; or you might want to export your keybinding set&amp;nbsp;to import it on another machine.&lt;/P&gt;
&lt;P&gt;The information pasted below is actually an&amp;nbsp;excerpt from one of our MSDN docs&lt;/A&gt;: &lt;A href="http://msdn2.microsoft.com/en-us/library/5zwses53"&gt;&lt;FONT color=#003399&gt;How To: Work with Shortcut Key Combinations.&lt;/FONT&gt;&lt;/A&gt;&amp;nbsp; It addresses the commonly asked questions we often get about these tasks.&amp;nbsp; So, read on!&lt;/P&gt;
&lt;H3 class=subHeading&gt;Determine the Shortcut Key Assigned to a Command&lt;/H3&gt;
&lt;P&gt;You can manually search for a command to determine whether or not it has a shortcut key combination.&lt;/P&gt;
&lt;H3 class=subHeading&gt;To determine the shortcut key combination for a command&lt;/H3&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;P&gt;On the &lt;B&gt;Tools&lt;/B&gt; menu, click &lt;B&gt;Options&lt;/B&gt;.&lt;/P&gt;
&lt;LI&gt;
&lt;P&gt;Expand the &lt;B&gt;Environment&lt;/B&gt; folder and select &lt;STRONG&gt;Keyboard&lt;BR&gt;&lt;/STRONG&gt;&lt;BR&gt;Note: If you do not see the &lt;STRONG&gt;Keyboard&lt;/STRONG&gt; page, check &lt;STRONG&gt;Show all settings&lt;/STRONG&gt; located in the lower left of the &lt;STRONG&gt;Options&lt;/STRONG&gt; dialog box.&lt;/P&gt;
&lt;LI&gt;In the &lt;B&gt;Show commands containing&lt;/B&gt; box, enter the name of the command without spaces. &lt;BR&gt;
&lt;LI&gt;
&lt;P&gt;For example, &lt;B&gt;solutionexplorer&lt;/B&gt;. &lt;/P&gt;
&lt;LI&gt;
&lt;P&gt;In the list, select the correct command. &lt;/P&gt;
&lt;P&gt;For example, View.SolutionExplorer. &lt;/P&gt;
&lt;LI&gt;
&lt;P&gt;If a shortcut key combination exists for the command, the combination appears in the &lt;B&gt;Shortcut(s) for selected command&lt;/B&gt; drop-down list.&lt;/P&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;&lt;FONT size=4&gt;&lt;STRONG&gt;Create Custom Shortcut Keys&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;You can create new shortcut key combinations for any command or change the shortcut key combination for commands with existing combinations.&lt;/P&gt;
&lt;H3 class=subHeading&gt;To create a new shortcut key combination&lt;/H3&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;P&gt;On the &lt;B&gt;Tools&lt;/B&gt; menu, click &lt;B&gt;Options&lt;/B&gt;.&lt;/P&gt;
&lt;LI&gt;
&lt;P&gt;Expand the &lt;B&gt;Environment&lt;/B&gt; folder, and select &lt;B&gt;Keyboard&lt;/B&gt;.&lt;BR&gt;&lt;BR&gt;Note: If you do not see the &lt;B&gt;Keyboard&lt;/B&gt; page, check &lt;B&gt;Show all settings&lt;/B&gt; located in the lower left corner of the &lt;B&gt;Options&lt;/B&gt; dialog box.&lt;/P&gt;
&lt;LI&gt;
&lt;P&gt;In the &lt;B&gt;Show commands containing&lt;/B&gt; box, enter the name of the command without spaces.&lt;BR&gt;&lt;BR&gt;For example, &lt;B&gt;solutionexplorer&lt;/B&gt;. &lt;/P&gt;
&lt;LI&gt;
&lt;P&gt;In the list, select the command you want to assign to a shortcut key combination.&lt;/P&gt;
&lt;LI&gt;
&lt;P&gt;On the &lt;B&gt;Use new shortcut in&lt;/B&gt; drop-down list, select the feature area in which you want to use the shortcut. For example, you can choose &lt;B&gt;Global&lt;/B&gt; if you want the shortcut to work in all contexts. Unless the same shortcut is mapped (as Global) in another editor, you can use it. Otherwise, the editor overrides the shortcut.&lt;/P&gt;
&lt;LI&gt;
&lt;P&gt;Place the cursor in the &lt;B&gt;Press shortcut key(s)&lt;/B&gt; box, and then use the keyboard to enter the key combination you intend to use for the command.&lt;BR&gt;&lt;BR&gt;Note: Shortcuts can contain the SHIFT, ALT, and/or CTRL keys in combination with letters.&lt;BR&gt;&lt;BR&gt;Note: The following keys cannot be assigned: ESC, PRINT SCRN/SYS RQ, SCROLL LOCK, PAUSE/BREAK, TAB, CAPS LOCK, INSERT, HOME, END, PAGE UP, PAGE DOWN, Windows logo keys, Application key, any of the ARROW keys, or ENTER; NUM LOCK, DEL, or CLEAR on the numeric keypad; or CTRL+ALT+DELETE&lt;BR&gt;&lt;BR&gt;Be sure to check the &lt;B&gt;Shortcut currently used by&lt;/B&gt; box to see if the key combination is already assigned to another command in the mapping scheme. Press BACKSPACE to delete the key combination, if the combination is already in use, before trying another combination.&lt;/P&gt;
&lt;LI&gt;
&lt;P&gt;Click &lt;B&gt;Assign&lt;/B&gt;.&lt;BR&gt;&lt;BR&gt;Note: Changes made using the &lt;B&gt;Assign&lt;/B&gt; button are not cancelled, if you click the &lt;B&gt;Cancel&lt;/B&gt; button.&lt;/P&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;&lt;FONT size=4&gt;&lt;STRONG&gt;Exporting and Importing Shortcut Keys&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;You can share the shortcut key combinations in the current keyboard mapping scheme by exporting the information to a file so others can import the data.&lt;/P&gt;
&lt;H3 class=subHeading&gt;To export shortcut keys only&lt;/H3&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;P&gt;On the &lt;B&gt;Tools&lt;/B&gt; menu, choose &lt;B&gt;Import and Export Settings Wizard&lt;/B&gt;.&lt;/P&gt;
&lt;LI&gt;
&lt;P&gt;Select &lt;B&gt;Export select environment settings,&lt;/B&gt; and then click &lt;B&gt;Next&lt;/B&gt;.&lt;/P&gt;
&lt;LI&gt;
&lt;P&gt;Under &lt;B&gt;What settings do you want to export?&lt;/B&gt;, clear all categories selected by default.&lt;/P&gt;
&lt;LI&gt;
&lt;P&gt;Expand &lt;B&gt;Options&lt;/B&gt;, and then expand &lt;B&gt;Environment&lt;/B&gt;.&lt;/P&gt;
&lt;LI&gt;
&lt;P&gt;Select &lt;B&gt;Keyboard&lt;/B&gt; and then click &lt;B&gt;Next&lt;/B&gt;.&lt;/P&gt;
&lt;LI&gt;
&lt;P&gt;For &lt;B&gt;What do you want to name your settings file?&lt;/B&gt;, enter a name, and then click &lt;B&gt;Finish&lt;/B&gt;.&lt;/P&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;H3 class=subHeading&gt;To import only shortcut keys&lt;/H3&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;P&gt;On the &lt;B&gt;Tools&lt;/B&gt; menu, click &lt;B&gt;Import and Export Settings Wizard&lt;/B&gt;.&lt;/P&gt;
&lt;LI&gt;
&lt;P&gt;Select &lt;B&gt;Import select environment settings,&lt;/B&gt; and then click &lt;B&gt;Next&lt;/B&gt;.&lt;/P&gt;
&lt;LI&gt;
&lt;P&gt;Click &lt;B&gt;No, just import new settings, overwriting my current settings&lt;/B&gt;, and then click &lt;B&gt;Next&lt;/B&gt;.&lt;/P&gt;
&lt;LI&gt;
&lt;P&gt;Under &lt;B&gt;My Settings&lt;/B&gt;, select the settings file that contains the shortcut keys you want to import, or click &lt;B&gt;Browse&lt;/B&gt; to locate the correct settings file.&lt;/P&gt;
&lt;LI&gt;
&lt;P&gt;Click &lt;B&gt;Next&lt;/B&gt;.&lt;/P&gt;
&lt;LI&gt;
&lt;P&gt;Under &lt;B&gt;Which settings do you want to import?&lt;/B&gt;, clear all categories.&lt;/P&gt;
&lt;LI&gt;
&lt;P&gt;Expand &lt;B&gt;Options&lt;/B&gt;, and then expand &lt;B&gt;Environment&lt;/B&gt;.&lt;/P&gt;
&lt;LI&gt;
&lt;P&gt;Select &lt;B&gt;Keyboard&lt;/B&gt;, and then click &lt;B&gt;Finish&lt;/B&gt;.&lt;/P&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2269391" width="1" height="1"&gt;</description><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/IDE/default.aspx">IDE</category><category domain="http://blogs.msdn.com/vbteam/archive/tags/VB_5F00_Express/default.aspx">VB_Express</category><category domain="http://blogs.msdn.com/vbteam/archive/tags/VB2005/default.aspx">VB2005</category></item><item><title>Save Time – Use Keyboard Shortcuts!   (Lisa Feigenbaum)</title><link>http://blogs.msdn.com/vbteam/archive/2007/04/24/save-time-use-keyboard-shortcuts-lisa-feigenbaum.aspx</link><pubDate>Tue, 24 Apr 2007 23:45:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2264472</guid><dc:creator>VBTeam</dc:creator><slash:comments>8</slash:comments><comments>http://blogs.msdn.com/vbteam/comments/2264472.aspx</comments><wfw:commentRss>http://blogs.msdn.com/vbteam/commentrss.aspx?PostID=2264472</wfw:commentRss><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Visual Studio is all about developer productivity. To help developers be more efficient, Visual Studio has built keyboard shortcuts into the product for most of the functions normally found through the user interface – just like CTRL-C for copy. &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;To help you take advantage of these shortcuts, we’ve created posters that map out the default key bindings for our most popular Visual Studio 2005 languages – &lt;I&gt;Visual Basic&lt;/I&gt;, &lt;I&gt;Visual C#&lt;/I&gt; and &lt;I&gt;Visual C++&lt;/I&gt;.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;These key binding reference posters are available as free pdf’s through the download center at Microsoft.com. They are provided in print quality color and grey-scale for you to print locally.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;B&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Microsoft Download Center Poster URLs &lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 14pt; mso-bidi-font-size: 10.0pt"&gt;&lt;FONT face=Calibri&gt;&amp;nbsp;&amp;nbsp;&lt;A class="" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=6bb41456-9378-4746-b502-b4c5f7182203&amp;amp;DisplayLang=en" target=_blank mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=6bb41456-9378-4746-b502-b4c5f7182203&amp;amp;DisplayLang=en"&gt;Visual Basic 2005&lt;/A&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;A class="" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c15d210d-a926-46a8-a586-31f8a2e576fe&amp;amp;DisplayLang=en" target=_blank mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c15d210d-a926-46a8-a586-31f8a2e576fe&amp;amp;DisplayLang=en"&gt;Visual C# 2005&lt;/A&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;A class="" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=bccf84f4-4136-48b2-b4ec-83eaa484da20&amp;amp;DisplayLang=en" target=_blank mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=bccf84f4-4136-48b2-b4ec-83eaa484da20&amp;amp;DisplayLang=en"&gt;Visual C++ 2005&lt;/A&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;SPAN style="FONT-SIZE: 14pt; mso-bidi-font-size: 10.0pt"&gt;&lt;FONT face=Calibri&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-size: 11.0pt"&gt;&lt;?xml:namespace prefix = o /&gt;&lt;o:p&gt;&lt;IMG title="Keyboard Shortcut Posters" style="WIDTH: 500px; HEIGHT: 114px" height=114 alt="Keyboard Shortcut Posters" src="http://farm1.static.flickr.com/179/471663603_44e54344e1.jpg?v=0" width=500 mce_src="http://farm1.static.flickr.com/179/471663603_44e54344e1.jpg?v=0"&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;The VB download is here: &lt;/FONT&gt;&lt;A class="" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=6bb41456-9378-4746-b502-b4c5f7182203&amp;amp;DisplayLang=en" target=_blank mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=6bb41456-9378-4746-b502-b4c5f7182203&amp;amp;DisplayLang=en"&gt;&lt;FONT face=Calibri&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=6bb41456-9378-4746-b502-b4c5f7182203&amp;amp;DisplayLang=en&lt;/FONT&gt;&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE: 13pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin"&gt;&lt;BR&gt;&lt;FONT face=Calibri&gt;And now for Lisa’s Top Ten VB Keyboard Shortcuts…!&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpFirst style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;SPAN style="mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-fareast-theme-font: minor-latin"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT face=Calibri size=3&gt;1.&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;Ctrl+Tab&lt;/B&gt; to display the IDE Navigator, and then Tab to cycle through the files and active tool windows.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;(Just like Windows’ Alt+Tab, but in VS!)&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpMiddle style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;IMG title="Ctrl+Tab in VS" style="WIDTH: 410px; HEIGHT: 261px" height=261 alt="Ctrl+Tab in VS" src="http://farm1.static.flickr.com/173/471650801_7d3a2d3840.jpg?v=0" width=410 border=1 mce_src="http://farm1.static.flickr.com/173/471650801_7d3a2d3840.jpg?v=0"&gt;&lt;BR style="mso-special-character: line-break"&gt;&lt;BR style="mso-special-character: line-break"&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpMiddle style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;SPAN style="mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-fareast-theme-font: minor-latin"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT face=Calibri size=3&gt;2.&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;Ctrl+Down Arrow&lt;/B&gt; and &lt;B style="mso-bidi-font-weight: normal"&gt;Ctrl+Up Arrow&lt;/B&gt; to navigate to the next and previous method in the current file.&lt;BR style="mso-special-character: line-break"&gt;&lt;BR style="mso-special-character: line-break"&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpMiddle style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;SPAN style="mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-fareast-theme-font: minor-latin"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT face=Calibri size=3&gt;3.&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;Ctrl+M, Ctrl+M &lt;/B&gt;to toggle outlining for the current region.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;This applies to the +/- signs automatically inserted by VS for blocks including method bodies, as well as #Regions defined by users themselves.&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;IMG title=Regions style="WIDTH: 456px; HEIGHT: 201px" height=201 alt=Regions src="http://farm1.static.flickr.com/228/471632848_a7ee9d6fac.jpg?v=0" width=456 border=1 mce_src="http://farm1.static.flickr.com/228/471632848_a7ee9d6fac.jpg?v=0"&gt;&lt;BR style="mso-special-character: line-break"&gt;&lt;BR style="mso-special-character: line-break"&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpMiddle style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;SPAN style="mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-fareast-theme-font: minor-latin"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT face=Calibri size=3&gt;4.&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;Ctrl+K, Ctrl+C &lt;/B&gt;and &lt;B style="mso-bidi-font-weight: normal"&gt;Ctrl+K, Ctrl+U &lt;/B&gt;to comment and uncomment the current line or currently selected lines.&lt;BR style="mso-special-character: line-break"&gt;&lt;BR style="mso-special-character: line-break"&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpMiddle style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;SPAN style="mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-fareast-theme-font: minor-latin"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT face=Calibri size=3&gt;5.&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;Ctrl+‘&amp;gt;’ &lt;/B&gt;and &lt;B style="mso-bidi-font-weight: normal"&gt;Ctrl+‘&amp;lt;’&lt;/B&gt; to toggle between the Common and All tabs in VB intellisense.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Also, use &lt;B style="mso-bidi-font-weight: normal"&gt;Ctrl+Space &lt;/B&gt;to invoke the intellisense list.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpMiddle style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;IMG title="Intellisense Filtering Tabs" style="WIDTH: 462px; HEIGHT: 251px" height=251 alt="Intellisense Filtering Tabs" src="http://farm1.static.flickr.com/202/471632662_1e67407827.jpg?v=0" width=462 border=1 mce_src="http://farm1.static.flickr.com/202/471632662_1e67407827.jpg?v=0"&gt;&lt;BR style="mso-special-character: line-break"&gt;&lt;BR style="mso-special-character: line-break"&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpMiddle style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;SPAN style="mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-fareast-theme-font: minor-latin"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT face=Calibri size=3&gt;6.&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;Ctrl&lt;/B&gt; while a debugger tip is up, to make the debugger tip transparent and view the code beneath.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Try this out in Orcas Beta1, where you’ll be able to do the same trick with the intellisense window!&lt;BR style="mso-special-character: line-break"&gt;&lt;BR style="mso-special-character: line-break"&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpMiddle style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;SPAN style="mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-fareast-theme-font: minor-latin"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT face=Calibri size=3&gt;7.&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;Ctrl+Dot (.) &lt;/B&gt;to expand the available options for a Smart Tag menu.&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;IMG title="Smart Tag expansion" style="WIDTH: 500px; HEIGHT: 142px" height=142 alt="Smart Tag expansion" src="http://farm1.static.flickr.com/216/471651021_7e78838ceb.jpg?v=0" width=500 border=1 mce_src="http://farm1.static.flickr.com/216/471651021_7e78838ceb.jpg?v=0"&gt;&lt;BR style="mso-special-character: line-break"&gt;&lt;BR style="mso-special-character: line-break"&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpMiddle style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;SPAN style="mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-fareast-theme-font: minor-latin"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT face=Calibri size=3&gt;8.&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;Shift+F2 &lt;/B&gt;and &lt;B style="mso-bidi-font-weight: normal"&gt;Ctrl+Shift+F2 &lt;/B&gt;to Go To Definition on a symbol and then Navigate Back.&lt;BR style="mso-special-character: line-break"&gt;&lt;BR style="mso-special-character: line-break"&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpMiddle style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;SPAN style="mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-fareast-theme-font: minor-latin"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT face=Calibri size=3&gt;9.&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;‘Shortcut’+Tab &lt;/B&gt;to insert a snippet by its shortcut.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;For example, try typing ‘Property’+Tab on a new line within a class.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Or, use &lt;B style="mso-bidi-font-weight: normal"&gt;‘?’+Tab &lt;/B&gt;to display the Snippet Picker with all currently available snippets.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;(See Tools-&amp;gt;Code Snippets Manager for a list of snippets and their associated shortcuts.)&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;IMG title="Snippet Picker" style="WIDTH: 440px; HEIGHT: 222px" height=222 alt="Snippet Picker" src="http://farm1.static.flickr.com/179/471632988_7c89e10670.jpg?v=0" width=440 border=1 mce_src="http://farm1.static.flickr.com/179/471632988_7c89e10670.jpg?v=0"&gt;&lt;BR style="mso-special-character: line-break"&gt;&lt;BR style="mso-special-character: line-break"&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpLast style="MARGIN: 0in 0in 10pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;SPAN style="mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-fareast-theme-font: minor-latin"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT face=Calibri size=3&gt;10.&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;F1 &lt;/B&gt;to display a contextual Help for the current cursor position.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;For example: Press F1 on any VB keyword for help on how to use the language construct; press F1 on a Framework type to learn about its members and usage; etc.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT face=Calibri size=3&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 14pt; mso-bidi-font-size: 10.0pt"&gt;Download the poster, and then try out the shortcuts to form your own Top Ten!&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2264472" width="1" height="1"&gt;</description><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/IDE/default.aspx">IDE</category><category domain="http://blogs.msdn.com/vbteam/archive/tags/VB_5F00_Express/default.aspx">VB_Express</category><category domain="http://blogs.msdn.com/vbteam/archive/tags/VB2005/default.aspx">VB2005</category></item><item><title>Visual Basic "Orcas" Beta1 is in the wild! (Amanda Silver)</title><link>http://blogs.msdn.com/vbteam/archive/2007/04/19/visual-basic-orcas-beta1-is-in-the-wild.aspx</link><pubDate>Fri, 20 Apr 2007 02:20:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2198795</guid><dc:creator>VBTeam</dc:creator><slash:comments>11</slash:comments><comments>http://blogs.msdn.com/vbteam/comments/2198795.aspx</comments><wfw:commentRss>http://blogs.msdn.com/vbteam/commentrss.aspx?PostID=2198795</wfw:commentRss><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Woohoo! Its &lt;/FONT&gt;&lt;A href="http://blogs.msdn.com/somasegar/archive/2007/04/19/visual-studio-orcas-and-net-fx-3-5-beta1-shipped.aspx" mce_href="http://blogs.msdn.com/somasegar/archive/2007/04/19/visual-studio-orcas-and-net-fx-3-5-beta1-shipped.aspx"&gt;&lt;FONT face=Calibri size=3&gt;official&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt;, we finally got &lt;/FONT&gt;&lt;A href="http://msdn2.microsoft.com/en-us/vstudio/aa700831.aspx" mce_href="http://msdn2.microsoft.com/en-us/vstudio/aa700831.aspx"&gt;&lt;FONT face=Calibri size=3&gt;Orcas Beta1&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt; out the door! We’re very excited to get this release out to you so we can finally talk about some of the stuff we’ve been working on in addition to the LINQ and XML feature-set. We believe that Orcas Beta1 displays all of the essential value in the Orcas product but it’s important to keep in mind that it’s not feature-complete. There are many features (for example: lambda expressions, support for nullable types, etc.) that will be coming online in a later milestone. &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;That said, back to Beta1! Recently, there’s been a lot of discussion on this blog about the LINQ features, but I’d like to take the time to discuss some of the language and compiler related features in Orcas Beta1 that will radically improve your productivity even if you don’t give a &lt;I style="mso-bidi-font-style: normal"&gt;hoot&lt;/I&gt; or &lt;I style="mso-bidi-font-style: normal"&gt;holler&lt;/I&gt; about the revolution in programming that we fondly call LINQ.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;The first thing that’s going to jazz you is &lt;B style="mso-bidi-font-weight: normal"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;Intellisense Everywhere&lt;/I&gt;&lt;/B&gt;. In short, this feature is about providing statement completion suggestions at new points in your editing experience. Some examples are best shown as screen shots:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Calibri size=3&gt;Expressions:&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;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;IMG style="WIDTH: 479px; HEIGHT: 192px" height=192 src="http://blogs.msdn.com/photos/bethmassi/images/2199004/original.aspx" width=479 mce_src="http://blogs.msdn.com/photos/bethmassi/images/2199004/original.aspx"&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Calibri size=3&gt;Keywords:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;IMG src="http://blogs.msdn.com/photos/bethmassi/images/2199011/original.aspx" mce_src="http://blogs.msdn.com/photos/bethmassi/images/2199011/original.aspx"&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;Variable names:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;IMG src="http://blogs.msdn.com/photos/bethmassi/images/2199019/original.aspx" mce_src="http://blogs.msdn.com/photos/bethmassi/images/2199019/original.aspx"&gt;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;I’ll save the rest so as not to steal the thunder from another blogger on our team…. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Calibri size=3&gt;Another great feature that you’ll notice in Beta1 is &lt;B style="mso-bidi-font-weight: normal"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;Relaxed Delegates&lt;/I&gt;&lt;/B&gt;. In short, relaxed delegates are a way to extend VB’s implicit conversions to delegate types. With relaxed delegates, you can write the following code:&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes; mso-bidi-font-family: 'Courier New'"&gt;Private&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes; mso-bidi-font-family: 'Courier New'"&gt; &lt;SPAN style="COLOR: blue"&gt;Sub&lt;/SPAN&gt; Button1_Click(&lt;SPAN style="COLOR: blue"&gt;ByVal&lt;/SPAN&gt; sender &lt;SPAN style="COLOR: blue"&gt;As&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Object&lt;/SPAN&gt;, &lt;SPAN style="COLOR: blue"&gt;ByVal&lt;/SPAN&gt; e &lt;SPAN style="COLOR: blue"&gt;As&lt;/SPAN&gt; EventArgs) _&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Handles&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes; mso-bidi-font-family: 'Courier New'"&gt; Button1.Click, Button1.MouseClick&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;MsgBox(&lt;SPAN style="COLOR: #a31515"&gt;"Do Something"&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes; mso-bidi-font-family: 'Courier New'"&gt;End&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes; mso-bidi-font-family: 'Courier New'"&gt; &lt;SPAN style="COLOR: blue"&gt;Sub&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"&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;FONT face=Calibri size=3&gt;You can even omit *all* of the event arguments if your method body doesn’t need them. This improves readability without compromising type safety:&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes; mso-bidi-font-family: 'Courier New'"&gt;Option&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes; mso-bidi-font-family: 'Courier New'"&gt; &lt;SPAN style="COLOR: blue"&gt;Strict&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;On&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes; mso-bidi-font-family: 'Courier New'"&gt;Public&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes; mso-bidi-font-family: 'Courier New'"&gt; &lt;SPAN style="COLOR: blue"&gt;Class&lt;/SPAN&gt; Form1&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;Private&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Sub&lt;/SPAN&gt; Button1_Click() &lt;SPAN style="COLOR: blue"&gt;Handles&lt;/SPAN&gt; Button1.Click, Button1.MouseClick&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;MsgBox(&lt;SPAN style="COLOR: #a31515"&gt;"Do Something"&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;End&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Sub&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"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; LINE-HEIGHT: 115%; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes; mso-bidi-font-family: 'Courier New'"&gt;End&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes; mso-bidi-font-family: 'Courier New'"&gt; &lt;SPAN style="COLOR: blue"&gt;Class&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"&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 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Lastly, &lt;STRONG&gt;&lt;EM&gt;Multi-Targeting&lt;/EM&gt;&lt;/STRONG&gt; enables you to use Orcas Beta1 to write applications that target .NET 2.0, 3.0, or 3.5. This has been a long requested feature that is now in your hands. The idea is that by supporting multi-targeting, it’s a no-brainer to go out and pick up Orcas because it doesn’t necessarily require that you deploy a new runtime if you don’t use the features of .NET 3.5 – just your app. You can see this by going to File&lt;/FONT&gt;&lt;SPAN style="FONT-FAMILY: Wingdings; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-char-type: symbol; mso-symbol-font-family: Wingdings; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"&gt;&lt;SPAN style="mso-char-type: symbol; mso-symbol-font-family: Wingdings"&gt;à&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;New Project and changing the option in the dialog:&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;IMG src="http://blogs.msdn.com/photos/bethmassi/images/2199016/original.aspx" mce_src="http://blogs.msdn.com/photos/bethmassi/images/2199016/original.aspx"&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Hope these features find you well! &lt;/FONT&gt;&lt;A href="http://msdn2.microsoft.com/en-us/vstudio/aa700831.aspx" mce_href="http://msdn2.microsoft.com/en-us/vstudio/aa700831.aspx"&gt;&lt;FONT face=Calibri size=3&gt;Download the Beta&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt; and tell us what you think!&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&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;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2198795" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/vbteam/attachment/2198795.ashx" length="233078" type="image/bmp" /><category domain="http://blogs.msdn.com/vbteam/archive/tags/Amanda+Silver/default.aspx">Amanda Silver</category><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/IDE/default.aspx">IDE</category><category domain="http://blogs.msdn.com/vbteam/archive/tags/VB_5F00_Express/default.aspx">VB_Express</category></item><item><title>Visual Studio 2005 SP1 and Visual Basic 2005 Command-line Compiler (VBC.exe) Hotfix Released!</title><link>http://blogs.msdn.com/vbteam/archive/2007/01/03/visual-studio-2005-sp1-and-visual-basic-2005-command-line-compiler-vbc-exe-hotfix-released.aspx</link><pubDate>Wed, 03 Jan 2007 21:46:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1406385</guid><dc:creator>VBTeam</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/vbteam/comments/1406385.aspx</comments><wfw:commentRss>http://blogs.msdn.com/vbteam/commentrss.aspx?PostID=1406385</wfw:commentRss><description>&lt;SPAN style="COLOR: #1f497d"&gt;&lt;FONT face=Verdana&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT color=#000000&gt;Visual Studio 2005 SP1 is now available for download.&amp;nbsp; We’d like to thank everyone in the Visual Basic community for providing feedback on SP1 and helping us identify and address issues for this service pack.&amp;nbsp; In some areas, more than 50% of the bugs addressed were reported by customers through the MSDN Product Feedback Center.&amp;nbsp; Overall, SP1 offers customers improvements in responsiveness, stability and performance for Visual Basic 2005.&amp;nbsp; &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 color=#000000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT color=#000000&gt;This service pack rolls up all of the Visual Basic 2005 hotfixes we’ve made to date and provides you the best overall performance and stability when developing in Visual Basic 2005.&amp;nbsp; &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT color=#000000&gt;We recommend VB developers install SP1.&amp;nbsp; You can get SP1 at:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="COLOR: #1f497d"&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"&gt;&lt;A href="http://msdn.microsoft.com/vstudio/VS2005SP1" mce_href="http://msdn.microsoft.com/vstudio/VS2005SP1"&gt;http://msdn.microsoft.com/vstudio/VS2005SP1&lt;/A&gt;&lt;SPAN style="COLOR: #1f497d"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT color=#000000&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 color=#000000&gt;Service Pack 1 Update to Visual Basic 2005 Command-line Compiler (Vbc.exe)&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT color=#000000&gt;This hotfix provides the SP1 improvements for the Visual Basic 2005 command line compiler, (vbc.exe).&amp;nbsp; &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT color=#000000&gt;After installing SP1, install this hotfix to development and deployed machines to get the SP1 fixes for vbc.exe if any of the following apply: &lt;/FONT&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;&lt;SPAN style="mso-fareast-font-family: 'Times New Roman'"&gt;&lt;FONT color=#000000&gt;You are developing web sites with ASP.NET 2.0 in Visual Basic 2005 &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;&lt;SPAN style="mso-fareast-font-family: 'Times New Roman'"&gt;&lt;FONT color=#000000&gt;You are deploying ASP.NET 2.0 web sites written in Visual Basic 2005&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;&lt;SPAN style="mso-fareast-font-family: 'Times New Roman'"&gt;&lt;/SPAN&gt;&lt;FONT color=#000000&gt;You are building Visual Basic 2005 projects outside the IDE using VBC.exe&lt;/FONT&gt;&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P class=MsoListParagraphCxSpLast style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="COLOR: #1f497d"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;A href="http://go.microsoft.com/fwlink/?LinkID=78807" mce_href="http://go.microsoft.com/fwlink/?LinkID=78807"&gt;http://go.microsoft.com/fwlink/?LinkID=78807&lt;/A&gt;&lt;SPAN style="COLOR: #1f497d"&gt; &amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="COLOR: #1f497d"&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"&gt;&lt;FONT color=#000000&gt;Thanks for your contribution to Visual Studio 2005 SP1.&amp;nbsp; We welcome your feedback on this release.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT color=#000000&gt;Chris Mayo&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT color=#000000&gt;Visual Basic Program Manager&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1406385" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/vbteam/archive/tags/IDE/default.aspx">IDE</category><category domain="http://blogs.msdn.com/vbteam/archive/tags/Data_5F00_Design/default.aspx">Data_Design</category><category domain="http://blogs.msdn.com/vbteam/archive/tags/VB_5F00_Express/default.aspx">VB_Express</category><category domain="http://blogs.msdn.com/vbteam/archive/tags/Performance/default.aspx">Performance</category><category domain="http://blogs.msdn.com/vbteam/archive/tags/VB2005/default.aspx">VB2005</category><category domain="http://blogs.msdn.com/vbteam/archive/tags/Web/default.aspx">Web</category></item><item><title>Visual Basic Express Edition Videos</title><link>http://blogs.msdn.com/vbteam/archive/2006/09/13/visual-basic-express-edition-videos.aspx</link><pubDate>Wed, 13 Sep 2006 22:58:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:752639</guid><dc:creator>VBTeam</dc:creator><slash:comments>18</slash:comments><comments>http://blogs.msdn.com/vbteam/comments/752639.aspx</comments><wfw:commentRss>http://blogs.msdn.com/vbteam/commentrss.aspx?PostID=752639</wfw:commentRss><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;by Kathleen McGrath&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;Have you ever wished that you could have someone &lt;B style="mso-bidi-font-weight: normal"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;show&lt;/I&gt;&lt;/B&gt;&lt;I style="mso-bidi-font-style: normal"&gt; &lt;/I&gt;you how to accomplish a programming task instead of having to read through the steps on how to perform the task? Or maybe you just need a little more clarification about where a particular option is located. They say a picture is worth 1,000 words, so imagine what a video can do.&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'm creating a series of video demonstrations that follow the &lt;A title=http://msdn2.microsoft.com/en-us/library/90h82b3x.aspx href="http://msdn2.microsoft.com/en-us/library/90h82b3x.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/90h82b3x.aspx"&gt;Visual Basic Guided Tour&lt;/A&gt; in the Visual Basic Express documentation as a way to supplement the great content you'll find there. My first set of videos are based on &lt;A title=http://msdn2.microsoft.com/en-us/library/a08t4ke7.aspx href="http://msdn2.microsoft.com/en-us/library/a08t4ke7.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/a08t4ke7.aspx"&gt;Creating Your First Visual Basic Program&lt;/A&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;You can watch the video for each topic individually:&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; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;TABLE class=MsoTableGrid style="BORDER-COLLAPSE: collapse; mso-yfti-tbllook: 480; mso-padding-alt: 0in 5.4pt 0in 5.4pt" cellSpacing=0 cellPadding=0 border=0 class="MsoTableGrid"&gt;
&lt;TBODY&gt;
&lt;TR style="mso-yfti-irow: 0; mso-yfti-firstrow: yes"&gt;
&lt;TD class="" style="BORDER-RIGHT: #ece9d8; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 4.1in; PADDING-TOP: 0in; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" vAlign=top width=394&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;A title=http://msdn2.microsoft.com/en-us/library/eyzd6e34.aspx href="http://msdn2.microsoft.com/en-us/library/eyzd6e34.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/eyzd6e34.aspx"&gt;Step 1: Create a Project in Visual Basic&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: #ece9d8; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 106.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" vAlign=top width=142&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;A title=http://xpstream.winisp.net/kathleenmcgrath/VBExpressDemos/Create%20a%20Project%20in%20Visual%20Basic.wmv href="http://xpstream.winisp.net/kathleenmcgrath/VBExpressDemos/Create%20a%20Project%20in%20Visual%20Basic.wmv" mce_href="http://xpstream.winisp.net/kathleenmcgrath/VBExpressDemos/Create%20a%20Project%20in%20Visual%20Basic.wmv"&gt;View Video Screencast&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 1"&gt;
&lt;TD class="" style="BORDER-RIGHT: #ece9d8; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 4.1in; PADDING-TOP: 0in; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" vAlign=top width=394&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;A title=http://msdn2.microsoft.com/en-us/library/s3hwe76s.aspx href="http://msdn2.microsoft.com/en-us/library/s3hwe76s.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/s3hwe76s.aspx"&gt;Step 2: Create a User Interface&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: #ece9d8; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 106.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" vAlign=top width=142&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;A title=http://xpstream.winisp.net/kathleenmcgrath/VBExpressDemos/Create%20a%20User%20Interface.wmv href="http://xpstream.winisp.net/kathleenmcgrath/VBExpressDemos/Create%20a%20User%20Interface.wmv" mce_href="http://xpstream.winisp.net/kathleenmcgrath/VBExpressDemos/Create%20a%20User%20Interface.wmv"&gt;View Video Screencast&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 2"&gt;
&lt;TD class="" style="BORDER-RIGHT: #ece9d8; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 4.1in; PADDING-TOP: 0in; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" vAlign=top width=394&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;A title=http://msdn2.microsoft.com/en-us/library/y7x894ky.aspx href="http://msdn2.microsoft.com/en-us/library/y7x894ky.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/y7x894ky.aspx"&gt;Step 3: Customize Looks and Behavior&lt;/A&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: #ece9d8; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 106.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" vAlign=top width=142&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;A title=http://xpstream.winisp.net/kathleenmcgrath/VBExpressDemos/Customize%20Looks%20and%20Behavior.wmv href="http://xpstream.winisp.net/kathleenmcgrath/VBExpressDemos/Customize%20Looks%20and%20Behavior.wmv" mce_href="http://xpstream.winisp.net/kathleenmcgrath/VBExpressDemos/Customize%20Looks%20and%20Behavior.wmv"&gt;View Video Screencast&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 3"&gt;
&lt;TD class="" style="BORDER-RIGHT: #ece9d8; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 4.1in; PADDING-TOP: 0in; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" vAlign=top width=394&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;A title=http://msdn2.microsoft.com/en-us/library/bx0kecz4.aspx href="http://msdn2.microsoft.com/en-us/library/bx0kecz4.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/bx0kecz4.aspx"&gt;Step 4: Add Visual Basic Code&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: #ece9d8; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 106.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" vAlign=top width=142&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;A title=http://xpstream.winisp.net/kathleenmcgrath/VBExpressDemos/Add%20Visual%20Basic%20Code.wmv href="http://xpstream.winisp.net/kathleenmcgrath/VBExpressDemos/Add%20Visual%20Basic%20Code.wmv" mce_href="http://xpstream.winisp.net/kathleenmcgrath/VBExpressDemos/Add%20Visual%20Basic%20Code.wmv"&gt;View Video Screencast&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 4; mso-yfti-lastrow: yes"&gt;
&lt;TD class="" style="BORDER-RIGHT: #ece9d8; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 4.1in; PADDING-TOP: 0in; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" vAlign=top width=394&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;A title=http://msdn2.microsoft.com/en-us/library/s878kxw0.aspx href="http://msdn2.microsoft.com/en-us/library/s878kxw0.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/s878kxw0.aspx"&gt;Step 5: Run and Test Your Program&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: #ece9d8; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 106.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" vAlign=top width=142&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;A title=http://xpstream.winisp.net/kathleenmcgrath/VBExpressDemos/Run%20and%20Test%20Your%20Program.wmv href="http://xpstream.winisp.net/kathleenmcgrath/VBExpressDemos/Run%20and%20Test%20Your%20Program.wmv" mce_href="http://xpstream.winisp.net/kathleenmcgrath/VBExpressDemos/Run%20and%20Test%20Your%20Program.wmv"&gt;View Video Screencast&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&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;Or watch the entire process:&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;o:p&gt;
&lt;TABLE class=MsoTableGrid style="BORDER-COLLAPSE: collapse; mso-yfti-tbllook: 480; mso-padding-alt: 0in 5.4pt 0in 5.4pt" cellSpacing=0 cellPadding=0 border=0 class="MsoTableGrid"&gt;
&lt;TBODY&gt;
&lt;TR style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes"&gt;
&lt;TD class="" style="BORDER-RIGHT: #ece9d8; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 4.1in; PADDING-TOP: 0in; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" vAlign=top width=394&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;A title=http://msdn2.microsoft.com/en-us/library/a08t4ke7.aspx href="http://msdn2.microsoft.com/en-us/library/a08t4ke7.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/a08t4ke7.aspx"&gt;Creating Your First Visual Basic Program&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: #ece9d8; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 106.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" vAlign=top width=142&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;A title=http://xpstream.winisp.net/kathleenmcgrath/VBExpressDemos/Creating%20Your%20First%20VB%20Program.wmv href="http://xpstream.winisp.net/kathleenmcgrath/VBExpressDemos/Creating%20Your%20First%20VB%20Program.wmv" mce_href="http://xpstream.winisp.net/kathleenmcgrath/VBExpressDemos/Creating%20Your%20First%20VB%20Program.wmv"&gt;View Video Screencast&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/o:p&gt;&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;Enjoy! And please feel free to send me your feedback about these video screencasts.&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;-- Kathleen&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=752639" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/vbteam/archive/tags/Kathleen+McGrath/default.aspx">Kathleen McGrath</category><category domain="http://blogs.msdn.com/vbteam/archive/tags/VB_5F00_Express/default.aspx">VB_Express</category><category domain="http://blogs.msdn.com/vbteam/archive/tags/VB2005/default.aspx">VB2005</category></item><item><title>Beginners coding in ASP.NET</title><link>http://blogs.msdn.com/vbteam/archive/2005/07/11/beginners-coding-in-asp-net.aspx</link><pubDate>Mon, 11 Jul 2005 23:04:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:437635</guid><dc:creator>VBTeam</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/vbteam/comments/437635.aspx</comments><wfw:commentRss>http://blogs.msdn.com/vbteam/commentrss.aspx?PostID=437635</wfw:commentRss><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;EM&gt;posted by Emily Yaich&lt;/EM&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Hello everyone!&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I am Emily Yaich and I am another one of the Microsoft Explorers working on the visual basic team.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I have been here since the second week in June, and I am loving every minute of it!&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; We haven't gotten into the heavy coding and testing of our app yet, which will be a challenge, but I am sure that it will be just as much fun. &lt;/SPAN&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;For those of you that are not familiar with the explorers program, it is an internship opportunity that allows first and second year students to come to Microsoft and gain valuable industry experience.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;We spent the first couple of weeks in class in the mornings and shadowing the various roles on the visual basic team in the afternoons.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;We got to see first hand what goes on behind the scenes to develop Whidbey.&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;Also, we were each assigned a starter kit to evaluate and extend.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I was assigned the personal website starter kit.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Being only a sophomore next term, the only coding I have done is in C++, so this is the first experience that I have had coding in visual basic.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;If anyone else is brand new, here are some great &lt;A href="http://lab.msdn.microsoft.com/express/beginner/"&gt;starter videos &lt;/A&gt;that start from the very beginning.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;They were very helpful to me.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;So in working with this website I also got my first experience with ASP.NET.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I decided to create an address book application so the user could keep track of their contacts.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The couple areas that I got stuck on were data-binding and importing an image for the button.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The data-binding is quite simple, for no real coding is really involved; it is mostly drag and drop.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;My problem came because first I tried to bind an access database to a sequel server source, and then when I bound it to an access source, I did not set a primary key.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;With several visits from &lt;?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /&gt;&lt;st1:PersonName w:st="on"&gt;Jeff King&lt;/st1:PersonName&gt;, a Program Manager in Web platform and tools, I finally figured that out.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;For more information on primary keys you can check out Greg Osefo’s blog, a fellow explorer, entitled “My First Database by Greg Osefo.”&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;The second problem was a bit more complicated.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;In my starter kit all of the buttons were images that were linked to the pages that they brought up.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;They were not just buttons that you can drag and drop.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I discovered that first there was a black and a white theme.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Within each theme there were several images that corresponded to each image on the website. &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;I added my own image to the list using paint but could not get it to integrate into my webpage. &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;With help from Paul Yuknewicz, a Program Manager in Visual Basic, I discovered that under App_Themes, under Black (which was the theme that I chose for my webpage), under Images, I had to add the following line to Default.skin:&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;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;asp&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;image&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; &lt;SPAN style="COLOR: red"&gt;runat&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="server"&lt;/SPAN&gt; &lt;SPAN style="COLOR: red"&gt;Imageurl&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="Images/button-view4.GIF"&lt;/SPAN&gt; &lt;SPAN style="COLOR: red"&gt;skinid&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="view"&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;/&amp;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"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; 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="MARGIN: 0in 0in 0pt"&gt;Button-view4.GIF was the name of the button that I created in paint.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;You then have to pick a name for the skinid, I chose view.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Then on the designer view of the page that you want to add the image, you have to choose the image that you want to make your new image, and change the skinid in the properties menu to the skinid that you chose for your image.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The name you chose will be in the drop-down menu if you put it in the Default.skin.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;It is quite simple once you know what you are doing.&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="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;I was very glad that I was given the website starter kit though because it was fun exploring something that I had never done before.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Also, the project that we are working on now as a group will not be a website, so that is another reason I was glad I got to work with it.&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;So we are currently working on an app for the Pocket PC.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;It is just getting off the ground, but&amp;nbsp;I will keep you posted!&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=437635" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/vbteam/archive/tags/VB_5F00_Express/default.aspx">VB_Express</category><category domain="http://blogs.msdn.com/vbteam/archive/tags/Web/default.aspx">Web</category></item></channel></rss>