300 likes | 387 Views
Learn about the enhanced features in Visual Basic 2008, including LINQ, improved performance, and integrated query capabilities. Discover how to simplify data manipulation and work with XML effortlessly. Dive into LINQ for relational data and explore its application within ADO.NET, XML, and more.
E N D
Visual Basic 2008 – What’snew André Obelink, MCSD – MVP MarYor | software & consultancywww.vbcentral.nl | www.obelink.com | www.maryor.nl
Me.About.ToString() • MarYor | software & consultancy • Auteur van artikelen en boeken.. • Geschreven voor Microsoft .NET Magazine, PC Active,MSDN Magazine Europe, SDN Magazine, VB Magazine • Boek: Visual Basic 2005 – de Basis (9/2006) • Boek: Visual Basic Kookboek (3/2008) • Boek: Visual Basic 2008 – de Basis (verwacht 5/2008) • De andere persoon achter VBcentral.nl • VP Speakers Bureau INETA Europe • Microsoft MVP voor Visual Basic sinds 2006
Wat niet aan de orde komt… • Diverse uitbreidingen binnen VS2008 IDE • Quality tools • Uitbreidingen ten behoeve van WPF applicaties • Uitbreidingen ten behoeve van webapplicaties • Reporting: nieuwe Report Projects • MSBuild: multi-targetting, multiple processors • ……. • http://msdn2.microsoft.com/en-us/library/bb386063.aspx
Wat wel aan de orde komt… • Performance VB2008 ten opzichte van VB2005 • IntellisenseEverywhere • LanguageIntegrated Query (LINQ) • LINQ to Objects, LINQ to SQL en LINQ to XML • En de taaluitbreidingen die LINQ mogelijk maakt… Type Infering, Object Initializers, Anonymous types, Extensionmethods, LambdaExpressions, … • XML Data Type
Performance VB2008 ↔VB2005 Bron: Lisa Feigenbaum (VB team). Testmachine: Windows XP, Dual Core Pentium, 3.0 Ghz, 1 GB RAM • Verdereperformance verbeteringen • - Debugger, projecten laden, …
Intellisense • Intellisense ‘everywhere’ • Performance sterk verbeterd • Intellisence voor JavaScript, CSS en XML literals • Transparant met CTRL toets • onderliggende code zichtbaar • VB: filtert het resultaat, waardoor lijst compacter • VB: LINQ en Intellisense + tooltip hints
Visual Basic 9.0 – Design Goals • Vereenvoudig het werken met data • Integratie van query- en transformatie opdrachten • Universele manier van ‘quering’ van objecten, relationele data en XML data • Vereenvoudig het werken met XML • Breng structuur in documenten zonder schema • Maak creëren van XML documenten makkelijker • Vereenvoudig toegang tot XML elementen
LanguageINtegrated Query (LINQ) Overige… C# VB .NET Language-Integrated Query Databronnen die LINQ ondersteunen LINQ binnen ADO.NET LINQ To XML LINQ To Objects LINQ To Datasets LINQ To Entities LINQ To SQL <boek> <titel/> <auteur/> </boek> Objecten Relationele data XML
Demo LanguageIntegrated Query
De ‘magie’ achter LINQ Dim query = Fromproc In Process.GetProcesses _ Whereproc.Threads.Count > 10 _ Select proc.ProcessName, proc.Threads.Count Dim query = Process.GetProcesses(). _ Where(Function(proc As Process) proc.Threads.Count > 10). _ Select(Function(proc As Process) _ New With{.ProcessName = proc.ProcessName, _ .Count =proc.Threads.Count}) Function _Filter1(proc As Process) As Boolean Return proc.Threads.Count > 10 Exit Function • Function _Projection1(proc As Process) As <AnonymousType> • Dim projection As New <AnonymousType> • projection.ProcessName = proc.ProcessName • projection.Count = proc.Threads.Count • Return projection • End Function
Relationele data vandaag de dag Dim connectionAs New SqlConnection(…) • connection.Open() Dim cmd As New SqlCommand(“SELECT c.Name, c.Phone “ & _ “FROM Customers As c” & _ “WHERE c.City = @p0”) cmd.Parameters(“@p0”) = “London” Dim dr As DataReader = connection.Execute(cmd) Whiledr.Read() Dim name as String = dr.GetString(0) Dim telefoon as String = dr.GetString(1) Dim gebdatum As Date = dr.GetDateTime(2) End While • connection.Close() Queries tussen aanhalingstekens ‘looselybound’ argumenten ‘looselytyped’ resultaten Geen controle tijdens compileren
Relationele Data met LINQ Public ClassCustomer … End Class Public ClassNorthwind InheritsDataContext Public PropertyCustomers As Table(Of Customer) … End Class Klassen beschrijven data Een Table is een soort collection ‘stronglytyped’ connection Dim db As New Northwind(…) Dim contact = Fromcust in db.Customers _ Wherecust.City = “London” Select cust.Name, cust.Phone For EachcustInfo in Contacts DoeIets(custInfo.Name, custInfo.Phone) Next Geïntegreerde query syntax ‘stronglytyped’ resultaten
Demo Linq voor relationele data – Linq to SQL
Even wennen aan de ‘SQL’ syntax Nodig voor IntelliSense • From komt voor Select Dim klanten = From klant in db.Customers _ Select klant.CustomerID, klant.CompanyName • Veel vrijheid bij bouwen query Bouw opdrachten ‘regel voor regel’ … Dim klanten = From klant in db.Customers _ Select klant.Name, klant.City, klant.ZIP _ Order By ZIP, _ Select Name, City … en over meerdere statements Dim klanten2 = From klant in klanten _ Whereklant.Name.StartsWith(“O”) _ Select klant.Name, klant.City Eventueel Select achterwege laten
Even wennen aan de ‘SQL’ syntax Zogenaamde ‘GroupingKey’ • Expliciete aggregatie • Bevat ook operators voor hiërarchische data Dim klanten = Fromsodin db.SalesOrderDetails _ Group Bysod.SalesOrderHeader.CustomerID _ IntoOrderTotaal = Sum(sod.OrderQty * sod.UnitPrice) _ Select CustomerID, OrderTotaal Expliciete aggregatie ImportsSystem.Diagnostics Dim procs = Fromproc In Process.GetProcesses() _ Aggregate thread In proc.Threads _ IntoThreadPriorityGemiddelde = Average(thread.CurrentPriority) _ • Select LijstProcessen = proc.ProcessName, ThreadPriorityGemiddelde Groep bestaat al
Demo Linq to XML – Maak XML
Maak XML - vandaag de dag Dim doc As New XmlDocument Dim wns As XmlElement = doc.CreateElement("Werknemers") For Each werknemer As Werknemer In werknemers Ifwerknemer.Achternaam = "Jansen" Then Dim wn As XmlElement = doc.CreateElement("Werknemer") Dim BSN As XmlAttribute = doc.CreateAttribute("BSN") BSN.Value = werknemer.BSN : wn.Attributes.Append(BSN) Dim an As XmlElement = doc.CreateElement("Achternaam") an.InnerText = werknemer.Achternaam : wn.AppendChild(an) Dim voornaam As XmlElement = doc.CreateElement("Voornaam") voornaam.InnerText = werknemer.Voornaam : wn.AppendChild(voornaam) wns.AppendChild(wn) End If Next doc.AppendChild(wns) Imperatief model Geen geïntegreerde queries ‘Document centric’ Geheugen intensief <Werknemers> <Werknemer BSN=“12345”> <Achternaam>Jansen</Achternaam> <Voornaam>Piet</Piet> </Werknemer> … </Werknemers>
LINQ to XML – Maak XML Declaratief model Dim xml As New XElement("Werknemers", _ From w In werknemers _ Wherew.Achternaam = "Jansen" _ Select New XElement("Werknemer", _ New XAttribute("BSN", w.BSN), _ New XElement("Achternaam", w.Achternaam), _ New XElement("Voornaam", w.Voornaam))) Geïntegreerde queries ‘Element centric’ Kleiner en sneller
Demo Linq to XML – Geïntegreerde XML binnen VB
Geïntegreerde XML binnen VB InfersXml.LinqXElement Dim werknemersxml = _ <Werknemers> <%= From w in werknemers _ Wherew.Voornaam = “Jan” _ Select <Werknemer> <Achternaam><%= w.Achternaam %></Achternaam> • <Voornaam><%= w.Voornaam %></Voornaam> </Werknemer> %> </Werknemers> Geen conceptuele barrière ‘Expression holes’ voor dynamische data / variabelen.
Visual Basic 2008 - Features • Query expressions • XML literals • XML element access • Nullable types • Object initializers • Local type inference • Lambdaexpressions • Extensionmethods • Expression trees • Anonymous types • Ternary operator • Coalesce operator • Relaxed delegates • Partialmethods
Tot de tijd op is… Taaluitbreidingen die LINQ mogelijk maken, maar ook erg handig zijn voor eigen gebruik!
Extensionmethods • Uitbreiden van bestaande datatypen • Plaats methode in module en in zelfde namespace • Markeer methode met <Extension()> <Extension()> _ Public Function Omdraaien(ByValtekst As String) As String Dim karakterArray() As Char = tekst.ToCharArray() Array.Reverse(karakterArray) Return New String(karakterArray) End Function Dim strNaam As String = “André” Debug.PrintstrNaam.Omdraaien() -------------- Resultaat érdnA
Object Initializers • Specificieer eigenschappen bij instantiëren • Is anders dan een overloaded Sub New() • Gebruik With {.eigenschapnaam = ….} Public Class Werknemer Public Property BSN() As String …. End Property …. End Class Dim werknemer As New Werknemer() With {.BSN = “123”} of … Dim bestand As New FileInfo(“c:\test.txt”) _ With {.IsReadOnly = True, _ .CreationTime = Now}
Anonymous Types • Definieer + instantieer objecten ‘on the fly’ • … dit is waar LINQ op gebaseerd is... Dim boek = New With {.Titel = "Visual Basic Kookboek", _ .Auteur = "André Obelink", _ .ISBN = 9789043014878} boek.Titel &= " - Luxe Editie"
LambdaExpressions • Functiedefinitie binnen een andere functie • lambda expressies zijn ook als argument te gebruiken • soort instantie van een delegate Dim woordenLijst As New List(Of String) woordenLijst.Add("een") : woordenLijst.Add("twee") woordenLijst.Add("vier") : woordenLijst.Add("zes") Dim DrieLetterWoorden = Function(s As String) s.Length = 3 Dim lijst = woordenLijst.FindAll(DrieLetterWoorden) For Each getal In lijst MessageBox.Show(getal) Next Dim Verdubbel = Function(Getal As Integer) Getal * 2 MessageBox.Show(Verdubbel(5).ToString) MessageBox.Show(Verdubbel(13).ToString)
Visual Basic 2008 – Extra’s • Refactor! • Gratis Visual Studio Add-In van DevExpress • Geschikt voor Visual Basic 2003 – 2008 • Veel nieuwe features (>15), enkele alleen VB • Visual Basic Power Packs 3.0 VB6 upgrade • PrintForm, Printer CompatibilityLibrary • Line en Shape Controls • InteropForms Toolkit 2.0 MDI + User controls • DataRepeaterControl
Vragen? e-mail: andre@obelink.com web: www.obelink.com | www.maryor.nl
HEROEShappen {here} LaunchKit