2016-05-09 13 views
0

enter image description hereWie erhält man die Summe zweier Spaltenwerte aus der SQL-Tabelle mit Entity Framework?

Ich habe einen Tabellennamen GRNDtlReturn in oben genannten Screenshot. Ich möchte die Summe von ReturnQuantity der ersten und dritten Zeile in Tabelle erhalten. Ich habe etwas Code geschrieben, aber es gibt die Summe der vollen ReturnQuantity Spalte zurück. Bitte hilf mir, das zu lösen.

Hier ist mein Code:

public IList<GRNDtlReturnModel> GetReturnSum() 
{ 
    return igrndtlreturnRepository.GetList (x=> x.GRNNo == "GRN00022" && x.ProductCode == "D/F/HL/DM/0003/C/002") 
      .Select(y => new GRNDtlReturnModel 
      { 
       GRNNo = y.GRNNo, 
       totalQuantity = context.GRNDtlReturns.Sum(p => p.ReturnQuantity) 
      }).ToList(); 
} 
+0

Warum möchten Sie die erste und dritte Reihe nehmen? Gibt es eine Beziehung mit GRNNo & GRNDtlReturns Tabelle? –

+0

Erste und dritte Zeile GRNNo Und ProductCode sind gleich, ich muss die Summe von ReturnQuantity in derselben GrNNo und ProductCode nehmen. – Rasika

+0

Benötigen Sie die zurückgegebene Liste oder nur das erste Element in der zurückgegebenen Liste? Der zweite Fall würde eine andere, wahrscheinlich bessere Antwort als die aktuelle erlauben. – grek40

Antwort

0
public IList<GRNDtlReturnModel> GetReturnSum() 
{ 
     return igrndtlreturnRepository.GetList(x=> x.GRNNo == "GRN00022" && 
               x.ProductCode == "D/F/HL/DM/0003/C/002") 
      .Select(y => new GRNDtlReturnModel 
      { 
       GRNNo = y.GRNNo, 

       totalQuantity = context.GRNDtlReturns. 
           Where(t=> t.GRNNo==y.GRNNo).Sum(p => p.ReturnQuantity) 

      }).ToList(); 
} 
+0

Dieser Code funktioniert, Danke Sehr! – Rasika

+0

bitte als akzeptiert markieren –

0

Ich gehe davon aus, dass igrndtlreturnRepository.GetList(x => x.GRNNo == grnno && x.ProductCode == productcode) eine IQueryable<GRNDtlReturn> kehrt nach dem Filterausdruck.

Fall 1: ein einzelnes Ergebnis für GRNNo = "GRN00022" und ProductCode = "D/F/HL/DM/0003/C/002"

In diesem Fall erhält, wird das Ergebnis von GetList bereits auf die entsprechenden Einträge begrenzt und es soll ein einzelne Ergebnis GRNDtlReturnModel sein, wenn jede Zeile die Kriterien entspricht.

GRNDtlReturnModel result = igrndtlreturnRepository.GetList(x => x.GRNNo == "GRN00022" && x.ProductCode == "D/F/HL/DM/0003/C/002") 
    .GroupBy(x => x.GRNNo, (k, v) => new GRNDtlReturnModel { GRNNo = k, totalQuantity = v.Sum(q => q.ReturnQuantity) }) 
    .FirstOrDefault(); 

Fall 2: Holen Sie sich die Gruppe-Summe für alle passenden Kombinationen von GRNNo und ProductCode

In diesem Fall wird die Gruppierung Ausdruck alle relevanten Gruppenschlüssel enthalten muss, bleibt die Berechnung der Summe gleich.

IList<GRNDtlReturnModel> result = igrndtlreturnRepository.GetList(x => true) 
    .GroupBy(x => new { x.GRNNo, x.ProductCode }, (k, v) => new GRNDtlReturnModel { GRNNo = k.GRNNo, totalQuantity = v.Sum(q => q.ReturnQuantity) }) 
    .ToList(); 

Dies sollte effizienter sein als ein verschachtelter Zugriff auf context.GRNDtlReturns.

Verwandte Themen