2016-11-15 1 views
1

So bin ich bei der Verwendung von linq immer auf diese Situation gestoßen. Sagen wir, ich habe Code wie unten:Summe der Linq-Werte in Select

  var results = _context.Products.Select(d => 
      new Models.ProductData() 
      { 
       Id = d.ProductId, 
       Name = d.Product.Name, 
       Qty = d.Number.Where(y => y.Active && y.CodeId == 5 && y.Status == "NEW").Sum(y => y.FeeAmount), 
       Qty1= d.Number.Where(y => y.Active && y.CodeId == 7 && y.Status == "NEW").Sum(y => y.Fee), 
       Total = d.Number.Where(y => y.Active && y.CodeId == 5 && y.Status == "NEW").Sum(y => y.FeeAmount) + d.Number.Where(y => y.Active && y.CodeId == 7 && y.Status == "NEW").Sum(y => y.Fee) 
      } 
      ); 

Für den Gesamtwert, gibt es einen besseren Weg, um die Gesamt zu berechnen, ohne die Linq Aussagen alle mit + Symbole zu schreiben, dazwischen? Es wäre viel schöner sein, um so etwas wie

Total = Qty + Qty1 
schreiben

ich die Summe aus dem anfänglichen Mapping weglassen könnte und das remap es durch Id Gruppierung und die Summen dort die Zuordnung durch Bezugnahme auf Total = Anzahl + Qty1 aber die scheint sich nur herum zu drehen.

Alle Vorschläge sind willkommen.

+4

Warum nicht "Total" eine schreibgeschützte Eigenschaft mit einem Getter, der 'Qty + Qty1' zurückgibt? In diesem Fall müssen Sie es nicht an erster Stelle setzen – KMoussa

+0

Da 'Total' ein berechneter Wert ist, wäre es ein schlechtes Design, um sich an seinen eigenen Wert zu erinnern, was passiert, wenn Sie' Qty1' später ändern, dann würden Sie das auch tun muss 'Total' aktualisieren. Was machst du wenn 'Menge' +' Menge1'! = 'Summe'? –

Antwort

6

In Ihrer Models.ProductData Klasse definieren die Total Eigenschaft wie folgt:

public double Total { 
    get { 
     return this.Qty + this.Qty1; 
    } 
} 

und vermeidet es in der Linq-Abfrage zu setzen.

+0

Nun, jetzt fühle ich mich albern, wenn ich nicht daran denke! Danke für die Antwort. Ich werde es in 6 Minuten markieren. –

+1

Bro, du musst dich nicht schämen, wir sind alle hier um zu lernen und Wissen zu teilen – user449689