Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
1 Einführung
2 Grundlagen
3 Fehlerbehandlung
4 Erweiterte Grundlagen
5 Objektorientierte Programmierung
6 Wichtige Klassen in .NET
7 Weitere Elemente eines Windows-Programms
8 Datenbank-Anwendungen mit ADO.NET
9 Internet-Anwendungen mit ASP.NET
10 Zeichnen mit GDI+
11 Neues in Visual Basic 2008
12 Beispielprojekte
A Installation
B Lösungen der Übungsaufgaben
Stichwort

Download:
- ZIP, ca. 8,4 MB
Buch bestellen
Ihre Meinung?

Spacer
 <<   zurück
Einstieg in Visual Basic 2008 von Thomas Theis
Inkl. zahlreicher Beispiele und Uebungen
Buch: Einstieg in Visual Basic 2008

Einstieg in Visual Basic 2008
geb., mit DVD
442 S., 24,90 Euro
Galileo Computing
ISBN 978-3-8362-1192-5
Online bestellenJetzt online bestellen
* versandkostenfrei in (D) und (A)
Pfeil 11 Neues in Visual Basic 2008
  Pfeil 11.1 Automatische Datentyp-Erkennung
  Pfeil 11.2 Vereinfachte Objekt-Initialisierung
  Pfeil 11.3 Anonyme Typen
    Pfeil 11.3.1 Vergleich von Objekten
    Pfeil 11.3.2 Schlüssel-Eigenschaften
  Pfeil 11.4 Erweiterung von Klassen durch externe Methoden
    Pfeil 11.4.1 Erweiterung eines Datentyps
    Pfeil 11.4.2 Erweiterung einer eigenen Klasse
  Pfeil 11.5 Lambda-Ausdrücke
  Pfeil 11.6 Verbesserungen der IntelliSense-Entwicklerunterstützung
  Pfeil 11.7 LINQ: Language INtegrated Query
    Pfeil 11.7.1 Klasse List
    Pfeil 11.7.2 Eine Liste von Variablen mit LINQ abfragen
    Pfeil 11.7.3 Eine Liste von Objekten mit LINQ abfragen
  Pfeil 11.8 MS SQL Server Compact 3.5
    Pfeil 11.8.1 Anlegen einer Datenbank
    Pfeil 11.8.2 Datenbankzugriff mit Visual Basic
  Pfeil 11.9 WPF (Windows Presentation Foundation)
    Pfeil 11.9.1 Eine einfache WPF-Anwendung
    Pfeil 11.9.2 Steuerelemente über die Toolbox hinzufügen
    Pfeil 11.9.3 Steuerelemente über XAML-Code hinzufügen


Galileo Computing - Zum Seitenanfang

11.7 LINQ: Language INtegrated Query  Zur nächsten ÜberschriftZur vorigen Überschrift

Mithilfe von LINQ (Language INtegrated Query) lassen sich SQL-ähnliche Abfragen formulieren, mit denen man Listen von Objekten sichten und verändern kann.

Fehlerfindung

LINQ ist in Visual Basic 2008 Bestandteil der Sprache, daher können Fehler bei der Formulierung einer Abfrage schnell gefunden werden. Im Unterschied dazu werden SQL-Befehle in Zeichenketten von Visual Basic eingebettet und an eine SQL-Datenbank gesendet. Eventuell auftretende Fehler müssen erst zu Visual Basic »durchgeleitet« werden.

Datenbanken, XML

Man kann LINQ u. a. im Zusammenhang mit Collections, SQL-Datenbanken und XML-Dokumenten nutzen. Die Möglichkeiten von LINQ sind so umfangreich, dass sie ein eigenes Buch füllen würden. In diesem Abschnitt wird nur das grundlegende Prinzip an einigen Beispielen erläutert.

IEnumerable

Eine Liste von Objekten, auf die LINQ-Abfragen angewendet werden, muss nummerierbar sein. Dies bedeutet, dass die Objektliste die Schnittstelle IEnumerable implementieren muss. Die Klasse List bietet diese Möglichkeit, daher soll sie zunächst vorgestellt werden.


Galileo Computing - Zum Seitenanfang

11.7.1 Klasse List  Zur nächsten ÜberschriftZur vorigen Überschrift

Ein Objekt der Klasse List ähnelt einem Datenfeld (Array). Es besteht also aus einer Reihe von Elementen desselben Typs, die nummeriert sind. Die Nummerierung beginnt bei 0. Einzelne Elemente kann man

    Add

  • mit der Methode Add() ans Ende der Liste anfügen,

    Insert

  • mit der Methode Insert() an einer gewünschten Stelle der Liste einfügen,

    RemoveAt

  • mit der Methode RemoveAt() an einer gewünschten Stelle aus der Liste löschen,
  • über einen Index ansprechen.

Ein Beispiel (p1107), in dem eine Liste mit Werten gefüllt, mehrfach verändert und nach jeder Veränderung neu ausgegeben wird:

Public Class frm1107 
   Private Sub cmdAnzeigen1_Click( ... ) Handles ... 
      Dim zahlenliste As New List(Of Single) 
      Dim i As Integer 
 
     zahlenliste.Add(15.2) 
     zahlenliste.Add(7.8) 
     zahlenliste.Add(14.0) 
     lstA.Items.Clear() 
     For i = 0 To zahlenliste.Count - 1 
        lstA.Items.Add(zahlenliste(i)) 
     Next 
 
     zahlenliste.Insert(1, 87.4) 
     lstA.Items.Add("---") 
     For i = 0 To zahlenliste.Count - 1 
        lstA.Items.Add(zahlenliste(i)) 
     Next 
 
     zahlenliste(0) = 6.7 
     lstA.Items.Add("---") 
     For Each z In zahlenliste 
        lstA.Items.Add(z) 
     Next 
 
     zahlenliste.RemoveAt(2) 
     lstA.Items.Add("---") 
     For Each z In zahlenliste 
        lstA.Items.Add(z) 
     Next 
   End Sub 
End Class

Abbildung 11.5  Erzeugung und Veränderung einer Liste

Zur Erläuterung:

    New List

  • Mit der Anweisung Dim zahlenliste As New List(Of Single) wird die Variable zahlenliste als Objekt der Klasse List deklariert. Der Datentyp der Listen-Elemente muss mithilfe von Of festgelegt werden. Es kann sich dabei um einen Basisdatentyp handeln (wie Integer, Single oder String) oder auch um eine Klasse.
  • Mithilfe der Methode Add() werden der zunächst leeren Liste drei Elemente hinzugefügt. Diese erhalten nacheinander die Indizes 0, 1 und 2.

    Count

  • Die Elemente der Liste werden mithilfe einer Schleife ausgegeben. Zur Steuerung der Schleife wird die Eigenschaft Count der Klasse List genutzt. Diese beinhaltet die Anzahl der Elemente der Liste.

    Index

  • Die einzelnen Elemente können über zahlenliste(index) angesprochen werden. Der Index beginnt wie bei Datenfeldern bei 0.
  • Die Anweisung zahlenliste.Insert(1, 87.4) fügt die Zahl 87,4 an der Position 1 in der Liste ein. Alle Elemente ab dieser Position werden nach hinten verschoben. Die Liste ist dadurch um ein Element größer.
  • Einzelne Elemente können über zahlenliste(index) auch direkt verändert werden.

    For...Each

  • Anstelle der For...Next-Schleife kann auch eine For...Each-Schleife verwendet werden. In diesem Fall wird z bei jedem Durchlauf der Schleife ein einzelnes Listenelement, also eine Single-Variable zugewiesen.
  • Die Anweisung zahlenliste.RemoveAt(2) löscht das Element an der Position 2 aus der Liste. Alle Elemente nach dieser Position werden nach vorne verschoben. Die Liste ist dadurch um ein Element kleiner.

Galileo Computing - Zum Seitenanfang

11.7.2 Eine Liste von Variablen mit LINQ abfragen  Zur nächsten ÜberschriftZur vorigen Überschrift

LINQ-Abfrage

Im nachfolgenden Beispiel (ebenfalls in p1107) wird eine Liste von Variablen erzeugt. Anschließend wird eine LINQ-Abfrage auf diese Liste angewendet. Das Abfrage-Ergebnis wird ermittelt und ausgegeben:

Public Class frm1107 
[ ... ] 
   Private Sub cmdAnzeigen2_Click( ... ) Handles ... 
      Dim zahlenliste As New List(Of Integer) 
 
      zahlenliste.Add(5) 
      zahlenliste.Add(7) 
      zahlenliste.Add(24) 
 
      Dim zahlenauswahl = _ 
         From zahl In zahlenliste _ 
         Where zahl < 8 _ 
         Select zahl 
 
      lstA.Items.Clear() 
      For Each ZA In zahlenauswahl 
         lstA.Items.Add(ZA) 
      Next 
   End Sub 
[ ... ] 
End Class

Zur Erläuterung:

  • Es wird eine Liste von Integer-Zahlen erzeugt und mit einigen Werten gefüllt.
  • Die folgende Abfrage wird formuliert: »Ermittle alle Zahlen aus der Liste, die kleiner als 8 sind«.

    Abfrage-Ergebnis

  • Ähnlich wie in einer For...Each-Schleife stellt zahl ein Element der Liste dar. Die Variable zahlenauswahl ist eine Collection, die das Abfrage-Ergebnis beinhaltet.
  • Zum Vergleich und zum besseren Verständnis: Eine SQL-Abfrage aus einer Tabelle mit dem Namen zahlenliste hätte gelautet: select * from zahlenliste where zahl < 8.
  • Die Collection mit dem Abfrage-Ergebnis wird anschließend mithilfe einer For...Each-Schleife durchlaufen. Dabei stellt ZA jeweils ein Element der Auswahl dar. Die ausgewählten Elemente werden im Listenfeld ausgegeben.

Abbildung 11.6  Abfrage aus Zahlenliste


Galileo Computing - Zum Seitenanfang

11.7.3 Eine Liste von Objekten mit LINQ abfragen  topZur vorigen Überschrift

Die Klasse Fahrzeug dient im folgenden Beispiel als Basis für eine Liste von Objekten. Der Aufbau der Klasse sieht wie folgt aus (ebenfalls in p1107):

Public Class Fahrzeug 
   Dim marke As String 
   Dim geschwindigkeit As Integer 
 
   Sub New(ByVal m As String, ByVal g As Integer) 
      Pmarke = m 
      Pgeschwindigkeit = g 
   End Sub 
 
   Public Property Pmarke() As String 
      Get 
         Pmarke = marke 
      End Get 
      Set(ByVal value As String) 
         marke = value 
      End Set 
   End Property 
 
   Public Property Pgeschwindigkeit() As Integer 
      Get 
         Pgeschwindigkeit = geschwindigkeit 
      End Get 
      Set(ByVal value As Integer) 
         geschwindigkeit = value 
      End Set 
   End Property 
 
   Function ausgabe() As String 
      ausgabe = Pmarke & ", " & Pgeschwindigkeit 
   End Function 
 
   Sub beschleunigen(ByVal wert As Integer) 
      Pgeschwindigkeit += wert 
   End Sub 
End Class

Zur Erläuterung:

  • Die Klasse hat zwei Eigenschaften: marke und geschwindigkeit. Beide werden jeweils über eine Eigenschaftsmethode kontrolliert und zugreifbar gemacht.
  • Es gibt der Einfachheit halber nur einen Konstruktor. Dieser verlangt Werte für beide Eigenschaften.
  • Es gibt zwei Methoden: beschleunigen() und ausgabe().

Basierend auf dieser Klasse wird eine Liste von Objekten erzeugt. Anschließend wird eine LINQ-Abfrage auf diese Liste angewendet. Das Abfrage-Ergebnis wird ermittelt und ausgegeben:

Public Class frm1107 
[ ... ] 
   Private Sub cmdAnzeigen3_Click( ... ) Handles ... 
      Dim Fahrzeugliste As New List(Of Fahrzeug) 
 
      Fahrzeugliste.Add(New Fahrzeug("Vespa", 35)) 
      Fahrzeugliste.Add(New Fahrzeug("Schwalbe", 45)) 
      Fahrzeugliste.Add(New Fahrzeug("Yamaha", 135)) 
      Fahrzeugliste.Add(New Fahrzeug("Honda", 145)) 
      Fahrzeugliste.Add(New Fahrzeug("Suzuki", 185)) 
 
      Dim Fahrzeugauswahl = _ 
         From FZ In Fahrzeugliste _ 
         Where FZ.Pgeschwindigkeit > 50 _ 
         And FZ.Pgeschwindigkeit < 170 _ 
         Order By FZ.Pgeschwindigkeit Descending _ 
         Select FZ 
 
      lstA.Items.Clear() 
      For Each FA In Fahrzeugauswahl 
         lstA.Items.Add(FA.ausgabe()) 
      Next 
   End Sub 
End Class

Zur Erläuterung:

  • Es wird eine Liste von Verweisen auf die Klasse Fahrzeug erzeugt.
  • Nacheinander werden fünf Objekte der Klasse Fahrzeug erzeugt und der Liste von Objektverweisen zugewiesen. Kurz gesagt: Die Fahrzeug-Liste wird gefüllt.
  • Die folgende Abfrage wird formuliert: »Ermittle alle Fahrzeuge aus der Liste, deren Geschwindigkeit zwischen 50 und 170 liegt, und gib das Ergebnis sortiert nach fallender Geschwindigkeit aus«.

    Abfrage-Ergebnis

  • FZ stellt in dieser Abfrage ein Element der Liste dar. Die Variable Fahrzeugauswahl ist eine Collection, die das Abfrage-Ergebnis beinhaltet.
  • Zum Vergleich und zum besseren Verständnis: Eine SQL-Abfrage aus einer Tabelle mit dem Namen »Fahrzeugliste« hätte gelautet: select * from Fahrzeugliste where geschwindigkeit > 50 and geschwindigkeit < 170 order by geschwindigkeit desc.
  • Die Collection mit dem Abfrage-Ergebnis wird anschließend mithilfe einer For...Each-Schleife durchlaufen. Dabei stellt FA jeweils ein Element der Auswahl dar. Die ausgewählten Elemente werden im Listenfeld ausgegeben.

Abbildung 11.7  Abfrage aus Objektliste



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.






 <<   zurück
  Zum Katalog
Zum Katalog: Einstieg in Visual Basic 2008






Einstieg in Visual Basic 2008
bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: Visual Basic 2008






 Visual Basic 2008


Zum Katalog: Einstieg in Visual C++ 2008






 Einstieg in
 Visual C++ 2008


Zum Katalog: Einstieg in Visual C# 2008






 Einstieg in
 Visual C# 2008


Zum Katalog: Visual C# 2008






 Visual C# 2008


Zum Katalog: Visual C# - Video-Training






 Visual C# -
 Video-Training


Zum Katalog: Einstieg in PHP 5 und MySQL 5






 Einstieg in PHP 5
 und MySQL 5


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo





Copyright © Galileo Press 2008
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de