Laden...

Dividiere List<T> Property bevor Sum()

Erstellt von xKushGene vor 6 Jahren Letzter Beitrag vor 6 Jahren 1.097 Views
X
xKushGene Themenstarter:in
91 Beiträge seit 2017
vor 6 Jahren
Dividiere List<T> Property bevor Sum()

Guten Tag,
ich habe in meiner Liste mehrere Properties, darunter StaticPreis (Brutto).
Wenn ich nun mehrere items in der Liste habe mit StaticPreis = 139,02 134,23, 24,14

Möchte ich, die Summe von allen items.StaticPreis haben. Diese müssen vorher aber durch 1.19 geteilt werden (eben netto).

Folgendes habe ich versucht:

double ges_netto = itemList.Sum(item => item.StaticPreis / 1.19);

Wie kann ich, bevor die Summe errechnet wird, jedes einzelne Item durch 1.19 teilen und erst dann die Summe errechnen ?

3.170 Beiträge seit 2006
vor 6 Jahren

Hallo,

Folgendes habe ich versucht:

double ges_netto = itemList.Sum(item => item.StaticPreis / 1.19);  

Das müsste doch funktionieren.

Aber eigentlich müsste es doch reichen, die Summe zu teilen:

double ges_netto = itemList.Sum(item => item.StaticPreis) / 1.19;

ansonsten, falls Du die Einzel-Nettopreise brauchst:

var nettoPreise = itemList.Select(item => item.StaticPreis / 1.19);
double ges_netto =nettoPreise.Sum();

Aber ob das einen Vorteil gegenüber Deinem Code bringt...

Es gäbe noch die Möglichkeit, ein Dictionary zu erzeugen, um die einzelnen Nettopreise den Positionen zuzuordnen:

var nettoDict = itemList.ToDictionary(item => item, item =>  item.StaticPreis / 1.19);
var double ges_netto = dict.Values.Sum();
// dann kannst Du den Einzelnettopreis auch abfragen über
var itemNetto = nettoDict[item];

Elegant wäre auch eine Erweiterungsmethode für den Nettopreis, die könntest Du überall verwenden, wo Du eben den Nettopreis benötigst:

public static double NettoPreis(this ItemType item)
{
    return item.StaticPreis / 1.19;
}

// Aufruf für Dein Beispiel:
itemList.Sum(item => item.NettoPreis())

(Code nur runtergetippt, nicht getestet)

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

X
xKushGene Themenstarter:in
91 Beiträge seit 2017
vor 6 Jahren

Danke für die Ideen,

Ich habe das Problem erst mal mit ner weiteren Liste behoben:


List<double> netto_items = new List<double>();
foreach(Zahlungsliste item in itemList)
{
      netto_items.Add(item.StaticPreis / 1.19);
}

double ges_netto = netto_items.Sum();

Aber ob das effektiver ist, weiß ich leider nicht.

1.040 Beiträge seit 2007
vor 6 Jahren

Du benötigst keine zweite Liste.

Folgendes habe ich versucht:

double ges_netto = itemList.Sum(item => item.StaticPreis / 1.19);  

Das funktioniert einwandfrei, schaue bitte warum es bei dir nicht funktioniert.

class Item
{
    public double BruttoPreis { get; }

    public Item(double bruttoPreis)
    {
        BruttoPreis = bruttoPreis;
    }
}

static void Main(string[] args)
{
    var list = new List<Item>
    {
        new Item(100),
        new Item(200)
    };
            
    Console.WriteLine(list.Sum(item => item.BruttoPreis / 1.19));

    Console.ReadLine();
}

EDIT sagt noch, solltest du tatsächlich nur den Netto-Preis der Summe benötigen -> teile am Ende die Summe der Bruttopreise durch 1,19; so wie von MarsStein vorgeschlagen. Spart ein paar Berechnungen. 😁

X
xKushGene Themenstarter:in
91 Beiträge seit 2017
vor 6 Jahren

Oh okay, dann funktioniert es wohl doch und ich habe mich vorhin nur verguckt oder ähnliches.

Habe eben auch noch mal beide Varianten getestet und bekam dasselbe Ergebnis ^^