22
33author: Sebastian Zug, Galina Rudolf & André Dietrich
44email: sebastian.zug@informatik.tu-freiberg.de
5- version: 1.0.3
5+ version: 1.0.4
66language: de
77narrator: Deutsch Female
88comment: Erweiterungsmethode, anonyme Typen, Enumerables, LINQ-Grundlagen und Basisfunktionen
@@ -34,6 +34,16 @@ import: https://raw.githubusercontent.com/TUBAF-IfI-LiaScript/VL_Softwareentwick
3434
3535---------------------------------------------------------------------
3636
37+ ## Diskussion der Evaluation
38+
39+ ...
40+
41+
42+ ## Prüfung Eingebettete Systeme
43+
44+ Prüfung und Terminabstimmung gern nach der Vorlesung.
45+
46+
3747## Fragen aus den Projekten
3848
3949> Frage: Was ist eigentlich eine csv Datei?
@@ -103,7 +113,7 @@ class ReadingCSV
103113<Project Sdk =" Microsoft.NET.Sdk" >
104114 <PropertyGroup >
105115 <OutputType >Exe</OutputType >
106- <TargetFramework >net6 .0</TargetFramework >
116+ <TargetFramework >net8 .0</TargetFramework >
107117 </PropertyGroup >
108118</Project >
109119```
@@ -230,6 +240,7 @@ using System.Collections.Generic;
230240
231241
232242public class Character : IComparable {
243+
233244 protected string name ;
234245 public int geburtsjahr ;
235246 private static int Count ;
@@ -263,6 +274,8 @@ public class Program
263274 Console .WriteLine ($" \n Einträge in der Datenbank: {ComicHeros .Count }" );
264275 Console .WriteLine (" \n Gefilterte Einträge in der Datenbank:" );
265276 Console .WriteLine (" | Index | Name | Ursprung |" );
277+
278+ // Filterung der Einträge
266279 List < Character > ComicHerosFiltered = new List <Character >();
267280 foreach (Character c in ComicHeros ){
268281 if (c .geburtsjahr < 1950 ) ComicHerosFiltered .Add (c );
@@ -514,7 +527,7 @@ FROM Vorlesung;
514527```
515528@AlaSQL .eval
516529
517- Eine erste Form der Filterung kann nun darin bestehen, zunächst die Anzahl der überhaupt aktiven Studierenden zu bestimmen. Diese müssten in der Tabelle ` hoert ` eingetragen sein. ` DISTINCT ` implementiert die Auswahl von eindeutigen Werten.
530+ Eine erste Form der Filterung kann nun darin bestehen, zunächst die Anzahl der überhaupt aktiven Studierenden zu bestimmen. Diese müssten in der Tabelle ` hoert ` eingetragen sein. ` DISTINCT ` implementiert die Auswahl von eindeutigen Werten, Dublikate werden entfernt .
518531
519532``` sql Abfrage mit eindeutigen Werten
520533SELECT DISTINCT MatrNr
@@ -529,6 +542,7 @@ FROM hoert;
529542SELECT VorlNr, Titel
530543FROM Vorlesung
531544WHERE Titel = ' ET' ;
545+ -- WHERE Titel LIKE '_T';
532546```
533547@AlaSQL .eval
534548
@@ -551,6 +565,8 @@ INNER JOIN Vorlesung ON Professor.PersNr = Vorlesung.PersNr;
551565```
552566@AlaSQL .eval
553567
568+ Die Abfrage liefert die Vorlesungsnummer, den Titel der Vorlesung sowie die Personalnummer und den Namen des Professors für alle Vorlesungen, die von einem Professor gehalten werden.
569+
554570` GROUP BY ` ermöglicht die Gruppierung von Zeilen, die ein gemeinsames Merkmal aufweisen. ` COUNT ` zählt die Anzahl der Zeilen, die in die Gruppe fallen.
555571
556572``` sql Gruppierung mit Aggregat-Funktionen
@@ -563,6 +579,45 @@ GROUP BY Professor.Name, Professor.PersNr;
563579
564580****************************************************************
565581
582+ ### Übliche Umsetzung "von außen"
583+
584+ > Was bewirkt die folgende nicht-typisierte Umsetzung?
585+
586+ ``` python
587+ import sqlite3
588+ connection = sqlite3.connect(" company.db" )
589+
590+ cursor = connection.cursor()
591+
592+ # delete
593+ # cursor.execute("""DROP TABLE employee;""")
594+
595+ sql_command = """
596+ CREATE TABLE employee (
597+ staff_number INTEGER PRIMARY KEY,
598+ fname VARCHAR(20),
599+ lname VARCHAR(30),
600+ gender CHAR(1),
601+ joining DATE,
602+ birth_date DATE);"""
603+
604+ cursor.execute(sql_command)
605+
606+ sql_command = """ INSERT INTO employee (staff_number, fname, lname, gender, birth_date)
607+ VALUES (NULL, "William", "Shakespeare", "m", "1564-04-??");"""
608+ cursor.execute(sql_command)
609+
610+
611+ sql_command = """ INSERT INTO employee (staff_number, fname, lname, gender, birth_date)
612+ VALUES (NULL, "Friedrich", "Schiller", "m", "1759-11-10");"""
613+ cursor.execute(sql_command)
614+
615+ # never forget this, if you want the changes to be saved:
616+ connection.commit()
617+
618+ connection.close()
619+ ```
620+
566621## LINQ Umsetzung
567622
568623* Language Integrated Query* (LINQ) zielt auf die direkte Integration von
@@ -662,6 +717,8 @@ class MyString
662717// Erweiterungsmethode in einer separaten Klasse
663718static class Exporter
664719{
720+ // Wichtig! Das this vor dem ersten Parameter macht daraus eine Erweiterungsmethode
721+ // ----
665722 public static void print (this MyString input , string newString )
666723 {
667724 Console .WriteLine (input .content + newString );
@@ -902,6 +959,7 @@ class Program {
902959 IEnumerable < int > scoreQuery =
903960 from score in scores // Bezug zur Datenquelle
904961 where score > 80 // Filterkriterium
962+ // where score == "A" // nur zum Testen des Compilers:-)
905963 select score ; // "Projektion" des Rückgabewertes
906964 // Execute the query.
907965 foreach (int i in scoreQuery )
@@ -932,15 +990,15 @@ Variante.
932990
933991Insgesamt sind 7 Query-Klauseln vorimplementiert, können aber durch Erweiterungsmethoden ergänzt werden.
934992
935- | Ausdruck | Bedeutung |
936- | -------- | ------------------------------------------------- |
937- | from | definieren der Laufvariable und einer Datenquelle |
938- | where | filtert die Daten nach bestimten Kriterien |
939- | orderby | sortiert die Elemente |
940- | select | projeziert die Laufvariable auf die Ergebnisfolge |
941- | group | bildet Gruppen innerhalb der Ergebnismenge |
942- | join | vereinigt Elemente mehrerer Datenquellen |
943- | let | definiert eine Hilfsvariable |
993+ | Ausdruck | Bedeutung |
994+ | --------- | ------------------------------------------------- |
995+ | ` from ` | definieren der Laufvariable und einer Datenquelle |
996+ | ` where ` | filtert die Daten nach bestimten Kriterien |
997+ | ` orderby ` | sortiert die Elemente |
998+ | ` select ` | projeziert die Laufvariable auf die Ergebnisfolge |
999+ | ` group ` | bildet Gruppen innerhalb der Ergebnismenge |
1000+ | ` join ` | vereinigt Elemente mehrerer Datenquellen |
1001+ | ` let ` | definiert eine Hilfsvariable |
9441002
9451003``` csharp
9461004class Student {
@@ -978,40 +1036,6 @@ Iteration durch den Datentyp `List<Student>`.
9781036
9791037F ür nicht - generische Typen (die also `IEnumerable ` anstatt `IEnumerable < T > ` unmittelbar ) implementieren , muss zus ätzlich der Typ der Laufvariable angegeben werden , da diese nicht aus der Datenquelle ermittelt werden kann .
9801038
981- ```csharp StudentListExample
982- using System ;
983- using System .Collections .Generic ;
984- using System .Linq ;
985-
986- public class Student
987- {
988- public string FirstName { get ; set ; }
989- public string LastName { get ; set ; }
990- public int [] Scores { get ; set ; }
991- }
992-
993- class Program {
994- public static void Main (string [] args ){
995- // ArrayList StudentList = new ArrayList(); <-- Nicht mehr benutzen
996- List < Student > StudentList = new List <Student >();
997- StudentList .Add (
998- new Student {
999- FirstName = " Svetlana" , LastName = " Müller" , Scores = new int [] { 98 , 92 , 81 , 60 }
1000- });
1001- StudentList .Add (
1002- new Student {
1003- FirstName = " Claire" , LastName = " O’Donnell" , Scores = new int [] { 75 , 84 , 91 , 39 }
1004- });
1005- var query = from student in StudentList
1006- where student .Scores [0 ] > 95
1007- select student ;
1008- foreach (Student s in query )
1009- Console .WriteLine (s .LastName + " : " + s .Scores [0 ]);
1010- }
1011- }
1012- ```
1013- @LIA .eval(` ["main.cs"] ` , ` mcs main.cs ` , ` mono main.exe ` )
1014-
10151039Welche Struktur ergibt sich dabei generell f ür eine LINQ - Abfrage ? Ein Query
10161040beginnt immer mit einer `from `- Klausel und endet mit einer `select ` oder `group `- Klausel .
10171041
@@ -1275,13 +1299,17 @@ class Program {
12751299 Console .WriteLine (" {0}" , student .Name );
12761300 }
12771301 }
1302+
12781303 var query2 = from s in students
12791304 group s by s .Subject into sg
12801305 select new {Subject = sg .Key , Count = sg .Count ()};
1281- Console . WriteLine ();
1306+
12821307 foreach (var group in query2 ){
12831308 Console .WriteLine (group .Count + " students attend in " + group .Subject );
12841309 }
1310+ Console .WriteLine (query2 .GetType ().Name );
1311+ var firstElement = query2 .Cast <object >().FirstOrDefault ();
1312+ Console .WriteLine (firstElement .GetType ().FullName );
12851313 }
12861314}
12871315```
0 commit comments