1. Aufgabe:
In Aufgabe 4.5 hatten Sie sich zunächst nur theoretisch mit einer Erweiterungsmethode GetEnumerator<T> befasst. Implementieren Sie nun diese Methode, sodass sie das Interface IEnumerable<T> erweitert – es reicht eine einfache Konsolenausgabe, die anzeigt, ob diese Methode aufgerufen wurde. Schreiben Sie auch einen Aufruf, mit dem sich testen lässt, ob die Erweiterungsmethode oder die bereits vorhandene Methode ausgeführt wurde. Erläutern Sie kurz, was bei der Definition einer Erweiterungsmethode zu beachten ist.
2. Aufgabe:
Erstellen Sie in einem Projekt „ESA“ – ähnlich wie in Aufgabe 2.8 – eine Methode StoreBankleitzahlen, die nun aber einige Bankleitzahlen nicht in eine Hashtable, sondern in ein generisches Collection-Objekt speichert, das Werte über Schlüssel verwalten kann.
Ergänzen Sie sodann eine Methode PrintBankleitzahlen, die alle im Collection-Objekt gespeicherten Bankleitzahlen in der Form [key] --> [value] zeilenweise auf Konsole ausgibt. Die eckigen Klammern sind durch die konkreten Werte mit key = Name der Bank und value = Bankleitzahl zu ersetzen. Realisieren Sie in dieser Methode nacheinander zwei verschiedene Lösungen – einmal durch explizites Iterieren auf einem Enumerator, zum anderen mit einer foreach-Schleife.
Orientieren Sie sich gegebenenfalls an der Dokumentation.
Erläutern Sie stichpunktartig die wesentlichen Schritte Ihrer Programmierung.
3. Aufgabe:
In dieser Aufgabe sollen Sie drei Abfragen, die bereits im SQL-Studienheft CSH06B angewandt wurden, in LINQ-Ausdrücke umformen. Sie können dies nacheinander in einer Methode LINQAusdrücke erledigen und müssen zuvor dafür sorgen, dass die Personendaten aus der Tabelle „dbdemo2.personen“ in Ihrer ESA-Anwendung zur Verfügung stehen.
Die Rückgabemengen sollen für alle drei Ausdrücke durch Konsolenausgaben in der Form [Vorname] [Nachname] in [Ortsname] ausgewertet werden.
a) Formulieren Sie die Abfrage nach Personen, deren Vorname „John“ lautet und deren Ort „Burlington“ ist, als LINQ-Ausdruck:
SELECT vorname, nachname, ort FROM personen
WHERE vorname='John' AND ort='Burlington'
ORDER BY nachname
4. Aufgabe:
Schreiben Sie (z.B. in einer Methode MostExpensiveArticle) einen LINQ-Ausdruck, der den teuersten Artikel in der Artikelliste ermittelt.
Erstellen Sie eine Ausgabeanweisung in der Form Der teuerste Artikel kostet [wert] $, wobei die eckigen Klammern wieder durch den ermittelten Wert zu ersetzen sind.
5. Aufgabe:
Zur Bildung geselliger Gruppen wäre es nützlich zu wissen, ob in einem Ort aus der Datenbank drei oder mehr Personen verzeichnet sind. Diese Personen lassen sich – beispielsweise für die Stadt „Bedford“ – mit nachfolgender SQL-Anweisung ermitteln:
SELECT vorname, nachname, ort FROM personen
WHERE ort='Bedford' AND ort IN (
SELECT ort FROM personen GROUP BY ort
HAVING COUNT(ort)>=3
) ORDER BY nachname
Setzen Sie diese Abfrage in einer Methode void ESA5(string queriedCity) in einen LINQ-Ausdruck um. Die zu prüfende Stadt wird als Parameterwert an die Methode übergeben. Die Ausgabe der ermittelten und nach Personen geordneten Collection soll folgendermaßen aussehen:
[x] Personen wohnen in "[Ort]":
[Vorname] [Nachname] in [Ort]
[Vorname] [Nachname] in [Ort]
[Vorname] [Nachname] in [Ort]
...
Auch hier sind wieder die eckigen Klammern durch die vom Programm ermittelten Werte zu ersetzen. Senden Sie den Quellcode sowie einen Screenshot der von Ihnen erstellten Ausgabe ein.