Jump to content
Unity Insider Forum

dynamische Summen bilden mit Linq


peachplayer

Recommended Posts

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

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

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

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

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...