{"id":5663,"date":"2007-07-26T13:02:00","date_gmt":"2007-07-26T13:02:00","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/vbteam\/2007\/07\/26\/lambdas-and-take-while-and-group-by-oh-my\/"},"modified":"2024-07-05T14:42:47","modified_gmt":"2024-07-05T21:42:47","slug":"lambdas-and-take-while-and-group-by-oh-my","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/vbteam\/lambdas-and-take-while-and-group-by-oh-my\/","title":{"rendered":"Lambdas, and Take While, and Group By, Oh My!"},"content":{"rendered":"<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\">Hooray! <\/font><a href=\"http:\/\/msdn2.microsoft.com\/en-us\/vstudio\/\"><font face=\"Calibri\" size=\"3\">Visual Basic 2008 Beta2<\/font><\/a><font face=\"Calibri\" size=\"3\"> has been released to the wild today to return to its natural habitat \u2013 the desktops of our beloved customers. (Please note our smiling GPM&#8217;s face on that landing page &#8212; he&#8217;s <strong>so <\/strong>happy the Beta is done.)<\/font><\/p>\n<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\">What\u2019s inside? So much that there might be <i>more<\/i> new features than we released in Beta1, but who\u2019s counting? Here\u2019s a laundry list that\u2019s specific to the VB language that\u2019s <i>new <\/i>for Beta2:<\/font><\/p>\n<p class=\"MsoListParagraphCxSpFirst\"><span><span><font size=\"3\">\u00b7<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><font face=\"Calibri\" size=\"3\">Query operators<\/font><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font size=\"3\">o<\/font><span>&nbsp;&nbsp; <\/span><\/span><\/span><font size=\"3\"><font face=\"Calibri\">Group By, Group Join, Join, Take [While], Skip [While], Aggregate, Count, Sum, Min, Max, Average, From <\/font><span><span>\u00e0<\/span><\/span><font face=\"Calibri\"> Let<\/font><\/font><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font size=\"3\">\u00b7<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><font face=\"Calibri\" size=\"3\">Nullable support<\/font><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font size=\"3\">\u00b7<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><font face=\"Calibri\" size=\"3\">Lambda Expressions (aka Inline Functions)<\/font><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font size=\"3\">\u00b7<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><font face=\"Calibri\" size=\"3\">Partial Methods \u2013 <\/font><a href=\"http:\/\/weblogs.asp.net\/scottgu\/archive\/2007\/07\/16\/linq-to-sql-part-5-binding-ui-using-the-asp-linqdatasource-control.aspx\"><font face=\"Calibri\" size=\"3\">ScottGu<\/font><\/a><font face=\"Calibri\" size=\"3\"> mentioned this the other day &amp; <\/font><a href=\"http:\/\/blogs.msdn.com\/vbteam\/archive\/2007\/03\/27\/partial-methods.aspx\"><font face=\"Calibri\" size=\"3\">ScottWis<\/font><\/a><font face=\"Calibri\" size=\"3\"> posted a couple weeks back<\/font><\/p>\n<p class=\"MsoListParagraphCxSpLast\"><span><span><font size=\"3\">\u00b7<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><font face=\"Calibri\" size=\"3\">Anonymous Types w\/Keys \u2013 Which <\/font><a href=\"http:\/\/www.panopticoncentral.net\/archive\/2007\/05\/11\/20566.aspx\"><font face=\"Calibri\" size=\"3\">PaulV<\/font><\/a><font face=\"Calibri\" size=\"3\"> has already discussed<\/font><\/p>\n<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\">Here are a bunch of queries you can now write with VB!<\/font><\/p>\n<div>\n<p class=\"MsoNormal\"><span>&#8216; Find suppliers in the same city as customers<\/span><\/p>\n<p class=\"MsoNormal\"><span>From<\/span><span> cust <span>In<\/span> db.Customers _<\/span><\/p>\n<p class=\"MsoNormal\"><span>Join<\/span><span> sup <span>In<\/span> db.Suppliers _<\/span><\/p>\n<p class=\"MsoNormal\"><span>On<\/span><span> cust.City <span>Equals<\/span> sup.City _<\/span><\/p>\n<p class=\"MsoNormal\"><span>Select<\/span><span> cust.CompanyName, sup.ContactName, cust.City<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span>&#8216; Find suppliers in the same city, with the same postalcode as customers<\/span><\/p>\n<p class=\"MsoNormal\"><span>From<\/span><span> cust <span>In<\/span> db.Customers _<\/span><\/p>\n<p class=\"MsoNormal\"><span>Join<\/span><span> sup <span>In<\/span> db.Suppliers _<\/span><\/p>\n<p class=\"MsoNormal\"><span>On<\/span><span> cust.City <span>Equals<\/span> sup.City <span>And<\/span> cust.PostalCode <span>Equals<\/span> sup.PostalCode<\/span><\/p>\n<p class=\"MsoNormal\"><span>Select<\/span><span> cust.CompanyName, sup.ContactName, cust.City<\/span><\/p>\n<p class=\"MsoNormal\"><span>&#8216; Find the average unit price and count for products by category<\/span><\/p>\n<p class=\"MsoNormal\"><span>From<\/span><span> prod <span>In<\/span> db.Products _<\/span><\/p>\n<p class=\"MsoNormal\"><span>Group<\/span><span> <span>By<\/span> prod.CategoryID _<\/span><\/p>\n<p class=\"MsoNormal\"><span>Into<\/span><span> Average(prod.UnitPrice), Count()<span><\/span><\/span><\/p>\n<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\">&nbsp;<\/font><\/p>\n<p class=\"MsoNormal\"><span>&#8216; For each customer find the group of the suppliers in the same country<\/span><\/p>\n<p class=\"MsoNormal\"><span>From<\/span><span> cust <span>In<\/span> db.Customers _<\/span><\/p>\n<p class=\"MsoNormal\"><span>Group<\/span><span> <span>Join<\/span> sup <span>In<\/span> db.Suppliers _<\/span><\/p>\n<p class=\"MsoNormal\"><span>On<\/span><span> cust.Country <span>Equals<\/span> sup.Country _<\/span><\/p>\n<p class=\"MsoNormal\"><span>Into<\/span><span> SuppliersInCountry = <span>Group<\/span> _<\/span><\/p>\n<p class=\"MsoNormal\"><span>Select<\/span><span> cust.CompanyName, SuppliersInCountry<\/span><\/p>\n<p class=\"MsoNormal\"><span>&#8216; For each customer, the count of the number of suppliers in the same country<\/span><\/p>\n<p class=\"MsoNormal\"><span>From<\/span><span> cust <span>In<\/span> db.Customers _<\/span><\/p>\n<p class=\"MsoNormal\"><span>Group<\/span><span> <span>Join<\/span> sup <span>In<\/span> db.Suppliers _<\/span><\/p>\n<p class=\"MsoNormal\"><span>On<\/span><span> cust.Country <span>Equals<\/span> sup.Country _<\/span><\/p>\n<p class=\"MsoNormal\"><span>Into<\/span><span> NumSuppliers = Count() _<\/span><\/p>\n<p class=\"MsoNormal\"><span>Select<\/span><span> cust.CompanyName, NumSuppliers<span><\/span><\/span><\/p>\n<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\">&nbsp;<\/font><\/p>\n<p class=\"MsoNormal\"><span>&#8216; Avg price, avg # in stock, and max on order for non-discontinued products<\/span><\/p>\n<p class=\"MsoNormal\"><span>Aggregate<\/span><span> prod <span>In<\/span> db.Products _<\/span><\/p>\n<p class=\"MsoNormal\"><span>Where<\/span><span> <span>Not<\/span> prod.Discontinued _<\/span><\/p>\n<p class=\"MsoNormal\"><span>Into<\/span><span> AvgPrice = Average(prod.UnitPrice), _<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>AvgInStock = Average(prod.UnitsInStock), _<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>MaxOnOrder = Max(prod.UnitsOnOrder)<\/span><\/p>\n<p class=\"MsoNormal\"><span>&#8216; Find orderID, OrderDate, and OrderTotal for each order<\/span><\/p>\n<p class=\"MsoNormal\"><span>From<\/span><span> order <span>In<\/span> db.Orders _<\/span><\/p>\n<p class=\"MsoNormal\"><span>Where<\/span><span> order.OrderDate &gt; #7\/22\/1996# _<\/span><\/p>\n<p class=\"MsoNormal\"><span>Aggregate<\/span><span> ordDet <span>In<\/span> order.Order_Details _<\/span><\/p>\n<p class=\"MsoNormal\"><span>Into<\/span><span> OrderTotal = _<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Sum(ordDet.UnitPrice *ordDet.Quantity * (1 &#8211; ordDet.Discount))<\/span><\/p>\n<p class=\"MsoNormal\"><span>Select<\/span><span> order.OrderID, order.OrderDate, OrderTotal<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span>&#8216; Fill a dictionary with the customers by CompanyName<\/span><\/p>\n<p class=\"MsoNormal\"><span>db.Customers.ToDictionary(<span>Function<\/span>(cust <span>As<\/span> Customer) cust.CompanyName)<span><\/span><\/span><\/p>\n<\/div>\n<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\">&nbsp;<\/font><\/p>\n<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\">In addition to all the new language support, we now have keyword Intellisense (finally!)<\/font><\/p>\n<p class=\"MsoNormal\"><img decoding=\"async\" title=\"Keyword Intellisense\" height=\"344\" alt=\"Keyword Intellisense\" src=\"https:\/\/devblogs.microsoft.com\/vbteam\/wp-content\/uploads\/sites\/7\/2007\/07\/KeywordIntellisense.jpg\" width=\"713\"><\/p>\n<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\">We have <a class=\"\" title=\"XML Intellisense\" href=\"http:\/\/blogs.msdn.com\/vbteam\/archive\/2007\/06\/06\/visual-basic-xml-transform-teched-demo-prep.aspx\">XML Intellisense<\/a>! What?? That\u2019s right.<\/font><\/p>\n<p class=\"MsoNormal\"><img decoding=\"async\" title=\"XML Intellisense\" height=\"229\" alt=\"XML Intellisense\" src=\"https:\/\/devblogs.microsoft.com\/vbteam\/wp-content\/uploads\/sites\/7\/2007\/07\/XMLIntellisense.jpg\" width=\"476\"><\/p>\n<p class=\"MsoNormal\"><font size=\"3\"><font face=\"Calibri\">And we\u2019ve done some major performance improvements for the background compiler \u2013 let us know if you experience any sluggishness&nbsp;for this&nbsp;Beta.&nbsp;&nbsp;(BTW, you should check out <a class=\"\" title=\"Installation Notes for Beta2\" href=\"http:\/\/weblogs.asp.net\/scottgu\/archive\/2007\/07\/26\/vs-2008-and-net-3-5-beta-2-released.aspx\">Scott&#8217;s post<\/a> on Beta2 to avoid some problems with AJAX extensions if you&#8217;re installing to a machine that has had previous versions of Orcas installed on it or has VS 2005 side by side.) <\/font><\/font><\/p>\n<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\">Also, don\u2019t forget to look for other exciting features around the product that pertain to VB and\/or LINQ. For example, Linq to SQL now supports the <\/font><span>Like<\/span><font face=\"Calibri\" size=\"3\"> operator! There\u2019s also a new <\/font><a href=\"http:\/\/weblogs.asp.net\/scottgu\/archive\/2007\/07\/16\/linq-to-sql-part-5-binding-ui-using-the-asp-linqdatasource-control.aspx\"><font face=\"Calibri\" size=\"3\">ASP:LinqDataSource<\/font><\/a><font face=\"Calibri\" size=\"3\"> control. <\/font><\/p>\n<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\"><\/font>&nbsp;<\/p>\n<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\">So, <\/font><a href=\"http:\/\/msdn2.microsoft.com\/en-us\/vstudio\/\"><font face=\"Calibri\" size=\"3\">get the bits<\/font><\/a><font face=\"Calibri\" size=\"3\"> while they\u2019re hot!<\/font><\/p>\n<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\"><\/font>&nbsp;<\/p>\n<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\">-Amanda<\/font><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hooray! Visual Basic 2008 Beta2 has been released to the wild today to return to its natural habitat \u2013 the desktops of our beloved customers. (Please note our smiling GPM&#8217;s face on that landing page &#8212; he&#8217;s so happy the Beta is done.) What\u2019s inside? So much that there might be more new features than [&hellip;]<\/p>\n","protected":false},"author":260,"featured_media":8818,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[192,195],"tags":[28,74,94,117,122,134,166],"class_list":["post-5663","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-featured","category-visual-basic","tag-amanda-silver","tag-ide","tag-linqvb9","tag-orcas","tag-paul-vick","tag-scott-wisniewski","tag-vb2008"],"acf":[],"blog_post_summary":"<p>Hooray! Visual Basic 2008 Beta2 has been released to the wild today to return to its natural habitat \u2013 the desktops of our beloved customers. (Please note our smiling GPM&#8217;s face on that landing page &#8212; he&#8217;s so happy the Beta is done.) What\u2019s inside? So much that there might be more new features than [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/posts\/5663","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/users\/260"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/comments?post=5663"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/posts\/5663\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/media\/8818"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/media?parent=5663"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/categories?post=5663"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/tags?post=5663"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}