peachplayer Geschrieben 12. Februar 2019 Melden Share Geschrieben 12. Februar 2019 Hallo Leute Weiss jemand wie man mit Linq dynamische Summen bilden kann? D.h. ich möchte von einer vorher definierten Liste die Datensätze nach "Parzellenname" aufsummieren. Das Resultat sollte dann die Kostensumme pro Parzellenname sein! Leider klappt das bisher nicht optimal, da nur Teilsummen gebildet werden. Kann mir jemand helfen? Ich verwende folgenden Code: liste1 = new List<KostenEintrag>(); var parzellen1 = liste1.GroupBy(item => item.GetParzellenname()); foreach (var parzelle in parzellen1) { // Code der pro Parzellenname ausgeführt wird // parzelle enthält alle Einträge der jeweiligen Parzelle string parzellenName = parzelle.Key; float parzellenSumme = parzelle.Sum(item => item.Summebilden()); KostenAusgabe += parzellenSumme + "\n"; Kostentotal += parzellenSumme; } public class KostenEintrag : IComparable<KostenEintrag> { int Nummer; string Parzellenname; float Kosten_d; float Kosten_pf; float Kosten_f; float totaleKosten; float KostenSumme; float Erlös; public KostenEintrag(int nr, string v, float kd, float kpf, float kf, float e) { Nummer = nr; Parzellenname = v; Kosten_d = kd; Kosten_pf = kpf; Kosten_f = kf; Erlös = e; } public int GetNummer() { return Nummer; } public string GetParzellenname() { return Parzellenname; } public float GetKosten_d() { return Kosten_d; } public float GetKosten_pf() { return Kosten_pf; } public float GetKosten_f() { return Kosten_f; } public float GetErlös() { return Erlös; } public bool GroesserAls(float neu) { if (Nummer > neu) return true; else return false; } public float Summebilden() { totaleKosten = Kosten_d + Kosten_pf + Kosten_f; return totaleKosten; } public int CompareTo(KostenEintrag b) { // Alphabetic sort name[A to Z] return this.Parzellenname.CompareTo(b.Parzellenname); } } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 12. Februar 2019 Melden Share Geschrieben 12. Februar 2019 Wenn du schon mit deiner Schleife durch alle Parzellen gehst, dann brauchst du da ja keinen extra-Linq-Ausdruck mehr dafür, die Teilsummen zusammenzurechnen. float gesamtsumme = 0f; foreach (var parzelle in parzellen1) { float parzellenSumme = parzelle.Sum(item => item.Summebilden()); gesamtsumme += parzellenSumme; } Debug.Log(gesamtsumme); Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
devandart Geschrieben 12. Februar 2019 Melden Share Geschrieben 12. Februar 2019 Oder man fasst es noch kürzer zusammen... Gib mir die Summe aller Parzellen gebildeten Summen. float gesamtsumme = parzellen1.Sum(parzelle => parzelle.Summebilden()); Debug.Log(gesamtsumme); Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 12. Februar 2019 Melden Share Geschrieben 12. Februar 2019 Ja aber ist doch bescheuert da ein zweites Mal drüberzuitereieren wenn es die Schleife bereits einmal tut. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
peachplayer Geschrieben 12. Februar 2019 Autor Melden Share Geschrieben 12. Februar 2019 Das Problem ist leider immer noch nicht gelöst! Gruss, peachplayer Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
peachplayer Geschrieben 14. Februar 2019 Autor Melden Share Geschrieben 14. Februar 2019 kann mir jemand weiterhelfen? Das fertige Unity-Projekt findet ihr im Attachement! Danke für eine Antwort! Gruss, peachplayer Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 14. Februar 2019 Melden Share Geschrieben 14. Februar 2019 Schreib doch lieber einfach mal, wo das Problem liegt. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
peachplayer Geschrieben 15. Februar 2019 Autor Melden Share Geschrieben 15. Februar 2019 float parzellenSumme = parzelle.Sum(item => item.Summebilden()); gesamtsumme += parzellenSumme; Hallo Sascha Mit diesen 2 Zeilen wird doch nur die Summe ALLER Kosten gebildet, aber nicht die Summe der Kosten pro Parzelle! Muss man ev. eine zweite Schleife machen? Kann mir jemand weiterhelfen? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
devandart Geschrieben 15. Februar 2019 Melden Share Geschrieben 15. Februar 2019 vor einer Stunde schrieb peachplayer: float parzellenSumme = parzelle.Sum(item => item.Summebilden()); gesamtsumme += parzellenSumme; Hallo Sascha Mit diesen 2 Zeilen wird doch nur die Summe ALLER Kosten gebildet, aber nicht die Summe der Kosten pro Parzelle! Muss man ev. eine zweite Schleife machen? Kann mir jemand weiterhelfen? Du iterierst durch alle Parzellen. In jedem Loop nimmst Du dir die aktuelle Parzelle und bildest die Summe aller in der Parzelle befindlichen Elemente. Danach addierst Du zur Gesamtsumme die jeweilige Summe der Parzelle. Du hast dann also "gesamtsumme", wo die... Gesamtsumme aller Parzellen enthalten ist und die parzellenSumme pro Loop, die die Summe deiner Parzelle abbildet. Sollte also so passen. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 15. Februar 2019 Melden Share Geschrieben 15. Februar 2019 Vielleicht haben wir ja dein Problem nicht richtig verstanden. Am 12.2.2019 um 13:37 schrieb peachplayer: Das Resultat sollte dann die Kostensumme pro Parzellenname sein! Heißt das, dein gewünschtes Ergebnis sind mehrere Zahlen? Also so viele Zahlen, wie du Parzellen hast? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
peachplayer Geschrieben 15. Februar 2019 Autor Melden Share Geschrieben 15. Februar 2019 Hallo Sascha Ja, genau! Das Resultat ist die jeweiligen Kosten pro Parzelle! Gruss, peachplayer Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 15. Februar 2019 Melden Share Geschrieben 15. Februar 2019 Ja dann... ich hinterfrage mal nicht den Sinn dahinter. var summen = new float[parzellen1.Length]; for (var i = 0; i < parzellen1.Length; i++) { float parzellenSumme = parzellen1[i].Sum(item => item.Summebilden()); summen[i] = parzellenSumme; } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.