2016-03-15 20 views
6

Diciamo che ho i seguenti dati in un database.Come utilizzare LINQ per ottenere più totali

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

Come posso scrivere una query LINQ per ottenere la somma di ValueA e anche la somma di ValueB per tutte le righe con Category == 1?

So che è possibile caricare tutti i dati e quindi utilizzare Sum sui dati caricati ma preferirei sommarli nel database.

So che posso usare group by ma non sto raggruppando nulla. Voglio solo questi due totali dai dati.

+0

È possibile raggruppare da un valore costante come 1. Scopri questa domanda relativa http://stackoverflow.com//questions/10239987/get -SUM-di-due-colonne-in-un-linq-query-senza-raggruppamento – juharr

risposta

3

Se si utilizza EF, si può provare questo:

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

È possibile raggruppare da una costante

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

O come octavioccl rilevare è anche possibile gruppo da Category dal momento che sarà un valore costante a causa della clausola where. Ma usare una costante è come ottenere ciò che si vuole nel caso generale.

Problemi correlati