コード例 #1
0
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            SetContentView(Resource.Layout.tests_act);

            SubjectsId = Intent.GetIntArrayExtra(Args.SUBJECTS_ID);
            TestsData.NewInstance(SubjectsId);
            FragmentsWatcher.NewInstance();

            spinner   = (Spinner)FindViewById(Resource.Id.tests_spinner);
            viewPager = (ViewPager)FindViewById(Resource.Id.subject_test_viewPager);
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: Alteshaus16/Pos3xhif
        static void Main(string[] args)
        {
            TestsData data = TestsData.FromFile("../db/tests.json");

            // *************************************************************************************
            // DEMO 1: Zeige alle Schüler der 3BHIF
            // *************************************************************************************
            IEnumerable <Pupil> demo1 = from p in data.Pupil
                                        where p.P_Class == "3BHIF"
                                        select p;

            // Alternative mit Method Syntax:
            demo1 = data.Pupil.Where(p => p.P_Class == "3BHIF");

            // *************************************************************************************
            // Schreibe in den nachfolgenden Übungen statt der Zeile
            // object resultX = null;
            // die korrekte LINQ Abfrage. Verwende den entsprechenden Datentyp statt object.
            // *************************************************************************************
            // ÜBUNG 1: Gib alle Tests des Lehrers ZUM in der 4EHIF aus.
            // *************************************************************************************
            // [{"TE_ID":450,"TE_Class":"4EHIF","TE_Teacher":"ZUM","TE_Subject":"BWM3","TE_Date":"2020-05-20T00:00:00","TE_Lesson":8},
            //  {"TE_ID":451,"TE_Class":"4EHIF","TE_Teacher":"ZUM","TE_Subject":"PRE","TE_Date":"2020-02-17T00:00:00","TE_Lesson":1}]
            object result1 = null;

            Console.WriteLine("RESULT1");
            Console.WriteLine(JsonSerializer.Serialize(result1));

            // *************************************************************************************
            // ÜBUNG 2: Gib alle Stunden der 3BHIF mit dem Lehrer FZ geordnet nach Tag (L_Day) und
            //          Unterrichtsstunde (L_Hour) aus.
            // *************************************************************************************
            // [{"L_ID":27,"L_Untis_ID":16,"L_Class":"3BHIF","L_Teacher":"FZ","L_Subject":"DBI1","L_Room":"C2.10","L_Day":2,"L_Hour":1},
            //  {"L_ID":695,"L_Untis_ID":536,"L_Class":"3BHIF","L_Teacher":"FZ","L_Subject":"DBI1x","L_Room":"B3.07MM","L_Day":5,"L_Hour":5},
            //  {"L_ID":696,"L_Untis_ID":536,"L_Class":"3BHIF","L_Teacher":"FZ","L_Subject":"DBI1x","L_Room":"B3.07MM","L_Day":5,"L_Hour":6}]
            object result2 = null;

            Console.WriteLine(Environment.NewLine + "RESULT2");
            Console.WriteLine(JsonSerializer.Serialize(result2));

            // *************************************************************************************
            // ÜBUNG 3: Wie Übung 2, allerdings soll ein neues Objekt mit den Properties Subject,
            //          Room, Day und Hour erstellt werden.
            // *************************************************************************************
            // [{"Subject":"DBI1","Room":"C2.10","Day":2,"Hour":1},
            //  {"Subject":"DBI1x","Room":"B3.07MM","Day":5,"Hour":5},
            //  {"Subject":"DBI1x","Room":"B3.07MM","Day":5,"Hour":6}]
            object result3 = null;

            Console.WriteLine(Environment.NewLine + "RESULT3");
            Console.WriteLine(JsonSerializer.Serialize(result3));

            // *************************************************************************************
            // ÜBUNG 4: Gib alle Lehrer, die NW2 Tests (TE_Subject ist
            //          NW2) hatten, aus. Erstelle ein neues Objekt mit TeacherID und TeacherName.
            //          TeacherName ist eine Verknüpfung aus T_Lastname und T_Firstname.
            //          Hinweis: Verwende Any in der where Klausel.
            // *************************************************************************************
            // [{"TeacherId":"BOM","TeacherName":"Boltz Michael"},
            //  {"TeacherId":"BRA","TeacherName":"Bramkamp Heiko"},
            //  {"TeacherId":"CSR","TeacherName":"Csaszar Robert"},
            //  {"TeacherId":"HD","TeacherName":"Haidegger Ingrid"},
            //  {"TeacherId":"HOM","TeacherName":"H\u00F6rzinger Michael"},
            //  {"TeacherId":"MOS","TeacherName":"Moser Gabriele"},
            //  {"TeacherId":"PUH","TeacherName":"Puhm Ursula"},
            //  {"TeacherId":"WAA","TeacherName":"Wagner Anna"},
            //  {"TeacherId":"WK","TeacherName":"Wodnar Karl"}]
            object result4 = null;

            Console.WriteLine(Environment.NewLine + "RESULT4");
            Console.WriteLine(JsonSerializer.Serialize(result4));

            // *************************************************************************************
            // ÜBUNG 5: In welchen Fächern (TE_Subject) gab nach der 7. Stunde Tests? Betrachte
            //          nur Klassen, wo SZ Klassenvorstand ist. Beachte, dass ein KV auch
            //          von mehreren Klassen KV sein kann.
            //          Die Fächer sind nur 1x auszugeben, verwende dafür Distinct(). Sortiere
            //          die Ausgabe nach dem Fach.
            // *************************************************************************************
            // ["BWM1","BWM2","DBI1","E1","GAD","GGPB","NVS1y","POS1"]
            object result5 = null;

            Console.WriteLine(Environment.NewLine + "RESULT5");
            Console.WriteLine(JsonSerializer.Serialize(result5));

            // *************************************************************************************
            // ÜBUNG 6: Welche Tests fanden in Klassen mit SZ als Klassenvorstand an einem Montag
            //          statt? Verwende das DayOfWeek Property des Feldes TE_Date.
            // *************************************************************************************
            // [{"Class":"4AHIF","Teacher":"GAL","Subject":"E1"},
            //  {"Class":"4AHIF","Teacher":"NAI","Subject":"GGPB"}]
            object result6 = null;

            Console.WriteLine(Environment.NewLine + "RESULT6");
            Console.WriteLine(JsonSerializer.Serialize(result6));

            // *************************************************************************************
            // ÜBUNG 7: Zeige alle Tests an, die der Klassenvorstand der 3AHIF in der 5CHIF hatte.
            // Hinweis:
            //          Finde vorher den KV der 3AHIF heraus und speichere ihn in eine string
            //          Variable.
            // *************************************************************************************
            // [{"TE_ID":510,"TE_Class":"5CHIF","TE_Teacher":"GC","TE_Subject":"BWM1","TE_Date":"2020-05-09T00:00:00","TE_Lesson":5},
            //  {"TE_ID":511,"TE_Class":"5CHIF","TE_Teacher":"GC","TE_Subject":"BWM2","TE_Date":"2020-06-12T00:00:00","TE_Lesson":9},
            //  {"TE_ID":512,"TE_Class":"5CHIF","TE_Teacher":"GC","TE_Subject":"BWM3","TE_Date":"2019-11-01T00:00:00","TE_Lesson":5}]
            object result7 = null;

            Console.WriteLine(Environment.NewLine + "RESULT7");
            Console.WriteLine(JsonSerializer.Serialize(result7));

            // *************************************************************************************
            // ÜBUNG 8: Welche Unterrichtsstunden der HIF Abteilung (C_Department = HIF) beginnen
            //          an einem Dienstag (L_Day = 2) nach 17:00? Verwende dafür das TimeOfDay
            //          Property von P_From und vergleiche mit einem erstellen
            //          TimeSpan(hour, minute, second) Objekt. Für die Ausgabe erstelle mit
            //          P_From.ToString("H:mm") den Zeitstring.
            // *************************************************************************************
            // [{"Class":"1EHIF","Subject":"POS1x","Teacher":"Puljic","Time":"17:10"},
            //  {"Class":"1EHIF","Subject":"POS1y","Teacher":"Schenk","Time":"17:10"},
            //  {"Class":"1EHIF","Subject":"POS1z","Teacher":"Lackinger","Time":"17:10"},
            //  {"Class":"2CHIF","Subject":"BSPKx","Teacher":"Csaszar","Time":"17:10"},
            //  {"Class":"2CHIF","Subject":"BSPKy","Teacher":"Hofbauer","Time":"17:10"},
            //  {"Class":"5AHIF","Subject":"POS1","Teacher":"Schletz","Time":"17:10"}]
            object result8 = null;

            Console.WriteLine(Environment.NewLine + "RESULT8");
            Console.WriteLine(JsonSerializer.Serialize(result8));

            // *************************************************************************************
            // ÜBUNG 9: Wann ist der späteste Test (späteste Unterrichtsstunde in TE_Lesson) von PUH?
            //          Erstelle dafür mit der Querysyntax eine Liste mit allen Stunden von PUH und
            //          ermittle dann mit Max() die späteste Stunde.
            // *************************************************************************************
            // 9
            object result9 = null;

            Console.WriteLine(Environment.NewLine + "RESULT9");
            Console.WriteLine(JsonSerializer.Serialize(result9));

            // *************************************************************************************
            // ÜBUNG 10: Ermittle die Daten des Lehrers SZ. Achtung: Gib keine Collection, sondern
            //           ein einzelnes Objekt zurück. Achte bei der Ausgabe darauf, dass das Ergebnis
            //           in ein JSON Objekt (beginnt mit {) und nicht in ein Array mit einem Element
            //           serialisiert wird.
            // *************************************************************************************
            // {"ID":"SZ","Lastname":"Schletz","Firstname":"Michael"}
            object result10 = null;

            Console.WriteLine(Environment.NewLine + "RESULT10");
            Console.WriteLine(JsonSerializer.Serialize(result10));
        }
コード例 #3
0
        static void Main(string[] args)
        {
            TestsData data = TestsData.FromFile("../db/tests.json");

            // *************************************************************************************
            // ÜBUNG 1: Wie viele Klassen gibt es pro Abteilung?
            // *************************************************************************************
            var result1 = from c in data.Schoolclass
                          group c by c.C_Department into g
                          select new
            {
                Department = g.Key,
                Count      = g.Count()
            };

            Console.WriteLine("RESULT1");
            Console.WriteLine(JsonSerializer.Serialize(result1));

            // *************************************************************************************
            // ÜBUNG 2: Wie (1), allerdings sind nur Abteilungen mit mehr als 10 Klassen auszugeben.
            //          Hinweis: Filtere mit Where nach dem Erstellen der Objekte mit Department
            //                   und Count
            // *************************************************************************************
            var result2 = from c in data.Schoolclass
                          group c by c.C_Department into g
                          where g.Count() > 10
                          select new
            {
                Department = g.Key,
                Count      = g.Count()
            };

            Console.WriteLine("RESULT2");
            Console.WriteLine(JsonSerializer.Serialize(result2));

            // *************************************************************************************
            // ÜBUNG 3: Wann ist der letzte Test (Max von TE_Date) pro Lehrer und Fach der 5AHIF
            //          in der Tabelle Test?
            // *************************************************************************************
            var result3 = from t in data.Test
                          where t.TE_Class == "5AHIF"
                          group t by new { t.TE_Teacher, t.TE_Subject } into g
                select new
            {
                Teacher  = g.Key.TE_Teacher,
                Subject  = g.Key.TE_Subject,
                LastTest = g.Max(te => te.TE_Date)
            };

            Console.WriteLine("RESULT3");
            Console.WriteLine(JsonSerializer.Serialize(result3));

            // *************************************************************************************
            // ÜBUNG 4
            // Bei Verschmutzungen wird oft der Lehrer, der die letzte Stunde pro Tag in einem Raum
            // war, befragt. Dafür filtere die Tabelle data.Lesson so, dass die Stunde gleich der
            // letzten Stunde des entsprechenden Raumes und Tages ist. Dafür wird in where eine
            // Unterabfrage benötigt, die nochmals data.Lesson filtert und die letzte Stunde
            // ermittelt.
            // Gib nur die Räume aus C2 (verwende StartsWith) am Montag (L_Day ist 1) aus. Beachte,
            // dass L_Room auch null sein kann. Verwende daher den ?. Operator. In diesem Fall soll
            // als Standardwert false geliefert werden. Achte außerdem auf die Rangfolge der Operatoren
            // ?? und &&.
            // *************************************************************************************
            var result4 = from l in data.Lesson
                          where (l.L_Room?.StartsWith("C2") ?? false) && l.L_Day == 1 &&
                          l.L_Hour == data.Lesson
                          .Where(le => le.L_Room == l.L_Room && le.L_Day == l.L_Day)
                          .Max(le => le.L_Hour)
                          select new
            {
                Room    = l.L_Room,
                Day     = l.L_Day,
                Hour    = l.L_Hour,
                Teacher = l.L_Teacher,
                Class   = l.L_Class
            };

            // {"Room":"C2.09","Day":1,"Hour":16,"Teacher":"PUC","Class":"5BBIF"}
            Console.WriteLine("RESULT4");
            Console.WriteLine(JsonSerializer.Serialize(result4));

            // *************************************************************************************
            // ÜBUNG 5 (schwer!)
            // Die vorige Abfrage hat eine sehr schlechte Laufzeit: Für jede Stunde wird abgefragt,
            // ob sie die letzte Stunde ist. Dafür wird wiederum die gesamte Lesson Tabelle
            // aggregiert. In Datenbanken wird dieses Problem daher so gelöst: Es wird eine View
            // mit 3 Spalten (Raum, Tag, letzte Stunde) erstellt. Danach wird mit einem Join aus
            // der Lesson Tabelle die letzte Stunde geholt.
            // Setze diese Technik nun in LINQ um, indem du in lastLesson eine Collection mit Raum,
            // Tag und der letzten Stunde (Max von L_Hour) speicherst. Dann führe einen Join durch.
            // Der Join mit mehreren Spalten funktioniert in LINQ so:
            //     from x in table1
            //     join y in table2 on new { X1 = x.Field1, X2 = Field2 } equals new { X1 = y.Field1, X2 = y.Field2 }
            // Die Ausgabe muss natürlich dem Beispiel 4 entsprechen.
            // *************************************************************************************
            var lastLesson = from l in data.Lesson
                             group l by new { l.L_Room, l.L_Day } into g
                select new
            {
                Room       = g.Key.L_Room,
                Day        = g.Key.L_Day,
                LastLesson = g.Max(le => le.L_Hour)
            };
            var result5 = from l in data.Lesson
                          join ll in lastLesson on new { X1 = l.L_Room, X2 = l.L_Day, X3 = l.L_Hour } equals
            new { X1 = ll.Room, X2 = ll.Day, X3 = ll.LastLesson }
            where (l.L_Room?.StartsWith("C2") ?? false) && l.L_Day == 1
            select new
            {
                Room    = l.L_Room,
                Day     = l.L_Day,
                Hour    = l.L_Hour,
                Teacher = l.L_Teacher,
                Class   = l.L_Class
            };

            Console.WriteLine("RESULT5");
            Console.WriteLine(JsonSerializer.Serialize(result5));
        }
コード例 #4
0
 protected override void OnDestroy()
 {
     TestsData.DeleteInstance();
     FragmentsWatcher.DeleteInstance();
     base.OnDestroy();
 }
コード例 #5
0
        public void Post([FromBody] Test test)
        {
            TestsData testsData = new TestsData();

            testsData.UpsertTest(test);
        }
コード例 #6
0
        public IEnumerable <Test> Get(string testRunId, string status)
        {
            TestsData testsData = new TestsData();

            return(testsData.GetDocuments().Where(t => t.TestRunId == testRunId && t.Result.Status == status));
        }
コード例 #7
0
        public Test Get(int testNumber)
        {
            TestsData testsData = new TestsData();

            return(testsData.GetTest(testNumber));
        }
コード例 #8
0
        public IEnumerable <Test> Get(string testRunId)
        {
            TestsData testsData = new TestsData();

            return(testsData.GetDocuments().Where(t => t.TestRunId == testRunId));
        }
コード例 #9
0
ファイル: DatabaseManager.cs プロジェクト: pontura/tuenti
 void GetTestsDone(string data)
 {
     testsData = JsonUtility.FromJson <TestsData>(data);
     StartCoroutine(LoadJson(url + "getAnswers.php", GetAnswersDone));
 }
コード例 #10
0
ファイル: Program.cs プロジェクト: Alteshaus16/Pos3xhif
        static async Task Main(string[] args)
        {
            // *************************************************************************************
            // Schreibe in den nachfolgenden Übungen statt der Zeile
            // object resultX = null;
            // die korrekte LINQ Abfrage. Verwende den entsprechenden Datentyp statt object.
            // Du kannst eine "schöne" (also eingerückte) Ausgabe der JSON Daten erreichen, indem
            // du die Variable WriteIndented auf true setzt.
            // *************************************************************************************
            var WriteIndented     = false;
            var serializerOptions = new JsonSerializerOptions {
                WriteIndented = WriteIndented
            };
            TestsData db = await TestsData.FromFile("db/tests.json");


            // *************************************************************************************
            // ÜBUNG 1: Erstelle für jeden Lehrer eine Liste der Fächer, die er unterrichtet. Es
            // sind nur die ersten 10 Datensätze auszugeben. Das kann mit
            // .OrderBy(t=>t.TeacherId).Take(10)
            // am Ende der LINQ Anweisung gemacht werden. Hinweis: Verwende Distinct für die
            // liste der Unterrichtsgegenstände.
            // *************************************************************************************
            object result1 = null;

            Console.WriteLine("RESULT1");
            Console.WriteLine(JsonSerializer.Serialize(result1, serializerOptions));

            // *************************************************************************************
            // ÜBUNG 2: Die 5AHIF möchte wissen, in welchem Monat sie welche Tests hat.
            //          Hinweis: Mit den Properties Month und Year kann auf das Monat bzw. Jahr
            //          eines DateTime Wertes zugegriffen werden. Die Ausgabe in DisplayMonth kann
            //          $"{mydate.Year:00}-{mydate.Month:00}" (mydate ist zu ersetzen)
            //          erzeugt werden
            // *************************************************************************************

            object result2 = null;

            Console.WriteLine("RESULT2");
            Console.WriteLine(JsonSerializer.Serialize(result2, serializerOptions));


            // *************************************************************************************
            // ÜBUNG 3: Jeder Schüler der 5AHIF soll eine Übersicht bekommen, welche Tests er pro Fach
            //          abgeschlossen hat.
            //          Es sind nur die ersten 2 Schüler mit OrderBy(p => p.P_ID).Take(2) am Ende des
            //          Statements auszugeben.
            //          Hinweis: Beachte die Datenstruktur in der Ausgabe.
            //   Pupil                           <-- Zuerst wird der Schüler projiziert (Select)
            //     |
            //     +-- P_ID
            //         P_Firstname
            //         P_Lastname
            //         Tests                     <-- Hier soll nach Subject gruppiert werden
            //           |
            //           +---- Subject           <-- Key der Gruppierung
            //           +---- Termine           <-- Projektion der Gruppierung
            //                    |
            //                    +------ TE_Teacher
            //                    +------ TE_Date
            //                    +------ TE_Lesson
            // *************************************************************************************

            object result3 = null;

            Console.WriteLine("RESULT3");
            Console.WriteLine(JsonSerializer.Serialize(result3, serializerOptions));

            // *************************************************************************************
            // ÜBUNG 4: Wie viele Klassen sind pro Tag und Stunde gleichzeitig im Haus?
            //          Hinweis: Gruppiere zuerst nach Tag und Stunde in Lesson. Für die Ermittlung
            //          der Klassenanzahl zähle die eindeutigen KlassenIDs, indem mit Distinct eine
            //          Liste dieser IDs (C_ID) erzeugt wird und dann mit Count() gezählt wird.
            //          Es sind mit OrderByDescending(g=>g.ClassCount).Take(5) nur die 5
            //          "stärksten" Stunden auszugeben.
            // *************************************************************************************
            object result4 = null;

            Console.WriteLine("RESULT4");
            Console.WriteLine(JsonSerializer.Serialize(result4, serializerOptions));

            // *************************************************************************************
            // ÜBUNG 5: Wie viele Klassen gibt es pro Abteilung?
            // *************************************************************************************
            object result5 = null;

            Console.WriteLine("RESULT5");
            Console.WriteLine(JsonSerializer.Serialize(result5, serializerOptions));

            // *************************************************************************************
            // ÜBUNG 6: Wie die vorige Übung, allerdings sind nur Abteilungen
            //          mit mehr als 10 Klassen auszugeben.
            //          Hinweis: Filtere mit Where nach dem Erstellen der Objekte mit Department
            //                   und Count
            // *************************************************************************************
            object result6 = null;

            Console.WriteLine("RESULT6");
            Console.WriteLine(JsonSerializer.Serialize(result6, serializerOptions));

            // *************************************************************************************
            // ÜBUNG 7: Wann ist der letzte Test (Max von TE_Date) pro Lehrer und Fach der 5AHIF
            //          in der Tabelle Test?
            // *************************************************************************************
            object result7 = null;

            Console.WriteLine("RESULT7");
            Console.WriteLine(JsonSerializer.Serialize(result7, serializerOptions));
        }
コード例 #11
0
ファイル: Program.cs プロジェクト: Alteshaus16/Pos3xhif
        static void Main(string[] args)
        {
            TestsData data = TestsData.FromFile("../db/tests.json");

            // *************************************************************************************
            // Schreibe in den nachfolgenden Übungen statt der Zeile
            // object resultX = null;
            // die korrekte LINQ Abfrage. Verwende den entsprechenden Datentyp statt object.
            // *************************************************************************************
            // ÜBUNG 1: Wie viele Klassen gibt es pro Abteilung?
            // *************************************************************************************
            object result1 = null;

            Console.WriteLine("RESULT1");
            Console.WriteLine(JsonSerializer.Serialize(result1));

            // *************************************************************************************
            // ÜBUNG 2: Wie (1), allerdings sind nur Abteilungen mit mehr als 10 Klassen auszugeben.
            //          Hinweis: Filtere mit Where nach dem Erstellen der Objekte mit Department
            //                   und Count
            // *************************************************************************************
            object result2 = null;

            Console.WriteLine("RESULT2");
            Console.WriteLine(JsonSerializer.Serialize(result2));

            // *************************************************************************************
            // ÜBUNG 3: Wann ist der letzte Test (Max von TE_Date) pro Lehrer und Fach der 5AHIF
            //          in der Tabelle Test?
            // *************************************************************************************
            object result3 = null;

            Console.WriteLine("RESULT3");
            Console.WriteLine(JsonSerializer.Serialize(result3));

            // *************************************************************************************
            // ÜBUNG 4
            // Bei Verschmutzungen wird oft der Lehrer, der die letzte Stunde pro Tag in einem Raum
            // war, befragt. Dafür filtere die Tabelle data.Lesson so, dass die Stunde gleich der
            // letzten Stunde des entsprechenden Raumes und Tages ist. Dafür wird in where eine
            // Unterabfrage benötigt, die nochmals data.Lesson filtert und die letzte Stunde
            // ermittelt.
            // Gib nur die Räume aus C2 (verwende StartsWith) am Montag (L_Day ist 1) aus. Beachte,
            // dass L_Room auch null sein kann. Verwende daher den ?. Operator. In diesem Fall soll
            // als Standardwert false geliefert werden. Achte außerdem auf die Rangfolge der Operatoren
            // ?? und &&.
            // *************************************************************************************
            object result4 = null;

            // {"Room":"C2.09","Day":1,"Hour":16,"Teacher":"PUC","Class":"5BBIF"}
            Console.WriteLine("RESULT4");
            Console.WriteLine(JsonSerializer.Serialize(result4));

            // *************************************************************************************
            // ÜBUNG 5 (schwer!)
            // Die vorige Abfrage hat eine sehr schlechte Laufzeit: Für jede Stunde wird abgefragt,
            // ob sie die letzte Stunde ist. Dafür wird wiederum die gesamte Lesson Tabelle
            // aggregiert. In Datenbanken wird dieses Problem daher so gelöst: Es wird eine View
            // mit 3 Spalten (Raum, Tag, letzte Stunde) erstellt. Danach wird mit einem Join aus
            // der Lesson Tabelle die letzte Stunde geholt.
            // Setze diese Technik nun in LINQ um, indem du in lastLesson eine Collection mit Raum,
            // Tag und der letzten Stunde (Max von L_Hour) speicherst. Dann führe einen Join durch.
            // Der Join mit mehreren Spalten funktioniert in LINQ so:
            //     from x in table1
            //     join y in table2 on new { X1 = x.Field1, X2 = Field2 } equals new { X1 = y.Field1, X2 = y.Field2 }
            // Die Ausgabe muss natürlich dem Beispiel 4 entsprechen.
            // *************************************************************************************
            object result5 = null;

            Console.WriteLine("RESULT5");
            Console.WriteLine(JsonSerializer.Serialize(result5));
        }
コード例 #12
0
ファイル: Program.cs プロジェクト: schrutek/SPG_POS
        static void Main(string[] args)
        {
            TestsData data = TestsData.FromFile("../db/tests.json");

            //Welche Klassen hat die 5CAIF am Freitag? Gib auch die Lehrer aus:

            var demo1 = data.Lesson
                        .Where(l => l.L_Class == "5CAIF" && l.L_Day == 5);

            //foreach (var l in demo1)
            //{
            //    Console.WriteLine($"{l.L_Hour}, {l.L_Subject}, {l.L_TeacherNavigation.T_Lastname}");
            //}


            //var demo2 = data.Schoolclass;
            //foreach (var s in demo2)
            //{
            //    foreach (var p in s.Pupils)
            //    {
            //        Console.WriteLine($"{p.P_Lastname}");
            //    }
            //}



            //var demo3 = data.Lesson
            //.Where(l => l.L_Subject == "D")
            //.GroupBy(l => new { l.L_Class, l.L_Teacher })
            //.Select(g => new
            //{
            //    Class = g.Key.L_Class,
            //    Lehrer = g.Key.L_Teacher,
            //    Count = g.GroupBy(g2 => g2.L_Day)
            //        .Select(g2 => new
            //        {
            //            g2.Key,
            //            Rooms = g2.Select(r => r.L_Room)
            //        })
            //});
            //Console.WriteLine(JsonSerializer.Serialize(demo3, new JsonSerializerOptions { WriteIndented = true }));



            //var demo4 = data.Lesson
            //    .GroupBy(l => l.L_Class)
            //    .Select(g => new
            //    {
            //        Class = g.Key,
            //        Count = g.Count(),
            //        MaxHour = g.Max(x => x.L_Hour)
            //    });

            //return;


            // *************************************************************************************
            // Schreibe in den nachfolgenden Übungen statt der Zeile
            // object resultX = null;
            // die korrekte LINQ Abfrage. Verwende den entsprechenden Datentyp statt object.
            // *************************************************************************************
            // ÜBUNG 1: Wie viele Klassen gibt es pro Abteilung?
            // *************************************************************************************

            var result1 = data
                          .Schoolclass
                          .GroupBy(s => s.C_Department)
                          .Select(s => new
            {
                Department = s.Key,
                Count      = s.Count()
            });

            Console.WriteLine("RESULT1");
            Console.WriteLine(JsonSerializer.Serialize(result1, new JsonSerializerOptions {
                WriteIndented = true
            }));

            // *************************************************************************************
            // ÜBUNG 2: Wie (1), allerdings sind nur Abteilungen mit mehr als 10 Klassen auszugeben.
            //          Hinweis: Filtere mit Where nach dem Erstellen der Objekte mit Department
            //                   und Count
            // *************************************************************************************

            object result2 = data
                             .Schoolclass
                             .GroupBy(s => s.C_Department)
                             .Where(s => s.Count() > 10)
                             .Select(s => new
            {
                Department = s.Key,
                Count      = s.Count()
            });

            Console.WriteLine("RESULT2");
            Console.WriteLine(JsonSerializer.Serialize(result2, new JsonSerializerOptions {
                WriteIndented = true
            }));

            // *************************************************************************************
            // ÜBUNG 3: Wann ist der letzte Test (Max von TE_Date) pro Lehrer und Fach der 5AHIF
            //          in der Tabelle Test?
            // *************************************************************************************

            object result3 = data
                             .Test
                             .Where(t => t.TE_Class == "5AHIF")
                             .GroupBy(t => new { t.TE_Teacher, t.TE_Subject })
                             .Select(g => new
            {
                g.Key,
                LastTest = g.Max(g => g.TE_Date)
            });

            Console.WriteLine("RESULT3");
            Console.WriteLine(JsonSerializer.Serialize(result3, new JsonSerializerOptions {
                WriteIndented = true
            }));

            // *************************************************************************************
            // ÜBUNG 4
            // Bei Verschmutzungen wird oft der Lehrer, der die letzte Stunde pro Tag in einem Raum
            // war, befragt. Dafür filtere die Tabelle data.Lesson so, dass die Stunde gleich der
            // letzten Stunde des entsprechenden Raumes und Tages ist. Dafür wird in where eine
            // Unterabfrage benötigt, die nochmals data.Lesson filtert und die letzte Stunde
            // ermittelt.
            // Gib nur die Räume aus C2 (verwende StartsWith) am Montag (L_Day ist 1) aus. Beachte,
            // dass L_Room auch null sein kann. Verwende daher den ?. Operator. In diesem Fall soll
            // als Standardwert false geliefert werden. Achte außerdem auf die Rangfolge der Operatoren
            // ?? und &&.
            // *************************************************************************************

            object result4 = data.Lesson
                             .GroupBy(l => new { l.L_Room, l.L_Day, l.L_Hour, l.L_Teacher, l.L_Class })
                             .Where(g => g.Max(s => s.L_Hour) == data.Lesson.Max(l2 => l2.L_Hour) &&
                                    (g.Key.L_Room?.StartsWith("C2") ?? false) &&
                                    g.Key.L_Day == 1)
                             .Select(g =>
                                     new
            {
                g.Key,
            });

            // {"Room":"C2.09","Day":1,"Hour":16,"Teacher":"PUC","Class":"5BBIF"}
            Console.WriteLine("RESULT4");
            Console.WriteLine(JsonSerializer.Serialize(result4, new JsonSerializerOptions {
                WriteIndented = true
            }));

            // *************************************************************************************
            // ÜBUNG 5 (schwer!)
            // Die vorige Abfrage hat eine sehr schlechte Laufzeit: Für jede Stunde wird abgefragt,
            // ob sie die letzte Stunde ist. Dafür wird wiederum die gesamte Lesson Tabelle
            // aggregiert. In Datenbanken wird dieses Problem daher so gelöst: Es wird eine View
            // mit 3 Spalten (Raum, Tag, letzte Stunde) erstellt. Danach wird mit einem Join aus
            // der Lesson Tabelle die letzte Stunde geholt.
            // Setze diese Technik nun in LINQ um, indem du in lastLesson eine Collection mit Raum,
            // Tag und der letzten Stunde (Max von L_Hour) speicherst. Dann führe einen Join durch.
            // Der Join mit mehreren Spalten funktioniert in LINQ so:
            //     from x in table1
            //     join y in table2 on new { X1 = x.Field1, X2 = Field2 } equals new { X1 = y.Field1, X2 = y.Field2 }
            // Die Ausgabe muss natürlich dem Beispiel 4 entsprechen.
            // *************************************************************************************

            object result5 = null;

            Console.WriteLine("RESULT5");
            Console.WriteLine(JsonSerializer.Serialize(result5, new JsonSerializerOptions {
                WriteIndented = true
            }));
        }