2016-03-15 14 views
6

Angenommen, ich habe die folgenden Daten in einer Datenbank.So verwenden Sie LINQ, um mehrere Summen zu erhalten

class Data 
{ 
    public int Category { get; set; } 
    public int ValueA { get; set; } 
    public int ValueB { get; set; } 
} 

Wie kann ich eine LINQ-Abfrage schreiben, die Summe von ValueA und auch die Summe der ValueB für alle Zeilen mit Category == 1 zu bekommen?

Ich weiß, ich könnte alle Daten laden und dann Sum auf die geladenen Daten verwenden, aber würde es vorziehen, sie in der Datenbank zusammenzufassen.

Ich weiß, dass ich group by verwenden kann, aber ich gruppiere mich durch nichts. Ich möchte nur diese beiden Summen aus den Daten.

+0

Sie können Gruppe durch einen konstanten Wert wie 1. Sehen Sie sich diese Frage im Zusammenhang http://stackoverflow.com//questions/10239987/get -sum-of-zwei-Spalten-in-One-Linq-Abfrage-ohne-Gruppierung – juharr

Antwort

3

Wenn Sie EF verwenden, können Sie dies versuchen:

var result= context.Data.Where(d=>d.Category == 1) 
         .GroupBy(d=>d.Category) 
         .Select(g=>new { 
             SumA=g.Sum(d=>d.ValueA), 
             SumB=g.Sum(d=>d.ValueB) 
             } 
           ); 
2

Sie können Gruppe durch einen konstanten

var result = from d in context.Data 
      where d.Category == 1 
      group d by 1 into g 
      select 
      {     
       ASum = g.Sum(d => d.ValueA), 
       BSum = g.Sum(d => d.ValueB) 
      }; 

Oder wie octavioccl wies darauf hin, Sie können auch Gruppe von Category da wird es ein konstanter Wert sein, weil der where Klausel. Aber mit einer Konstante können Sie im allgemeinen Fall erreichen, was Sie wollen.

Verwandte Themen