2016-03-15 27 views
6

Załóżmy, że mam następujące dane w bazie danych.Sposób korzystania z LINQ w celu uzyskania wielu podsumowań

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

Jak mogę napisać kwerendę LINQ, aby uzyskać sumę ValueA a także sumę ValueB dla wszystkich wierszy z Category == 1?

Wiem, że mogę załadować wszystkie dane, a następnie użyć Sum na wczytanych danych, ale wolałbym je podsumować w bazie danych.

Wiem, że mogę używać group by, ale nie grupuję się przez nic. Chcę tylko tych dwóch sum z danych.

+0

Można grupować według stałej wartości jak 1. Sprawdź ten powiązane pytanie http://stackoverflow.com//questions/10239987/get -sum-of-dwóch kolumn-w-jednym-linq-zapytanie-bez-grupowania – juharr

Odpowiedz

3

Jeśli używasz EF, można spróbować to:

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

Można grupować według stałej

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) 
      }; 

Albo jak octavioccl wskazał można również grupować według Category ponieważ będzie to wartość stała z powodu klauzuli where. Ale używanie stałej to sposób, w jaki możesz osiągnąć to, co chcesz w ogólnym przypadku.