2012-12-21 21 views
7

Sto cercando di ottenere valori aggregati dalla tabella di dati. Ma non riesco a capire come. Ho visto alcuni esempi in C#, ma non sono riuscito a tradurli in vb.net.Datatable group per con linq in vb.net

Ho tabella di dati

Month, campaign, sales, leads, gross 
1   1    5   10  1000 
1   2    0   5   0 
2   1    2   0   300 
2   2    1   3   200 

ho bisogno di ottenere un risultato:

Month, sales, leads, gross 
1   5  15  1000 
2   3   3   500 

Io non voglio loop e combinare i valori manualmente. Si prega di aiutare

risposta

9

Si desidera Group by Month? È possibile utilizzare Sum per sommare i gruppi:

Dim query = From row In dt 
     Group row By Month = row.Field(Of Int32)("Month") Into MonthGroup = Group 
     Select New With { 
      Key Month, 
      .Sales = MonthGroup.Sum(Function(r) r.Field(Of Int32)("Sales")), 
      .Leads = MonthGroup.Sum(Function(r) r.Field(Of Int32)("Leads")), 
      .Gross = MonthGroup.Sum(Function(r) r.Field(Of Int32)("Gross")) 
     } 

For Each x In query 
    Console.WriteLine("Month:{0} {1} {2} {3}", x.Month, x.Sales, x.Leads, x.Gross) 
Next 

Questa è una miscela di Linq query- e il metodo-sintassi.

+0

Grazie. Lo snippet stava causando un'eccezione di casting. Ma una volta cambiato da "Of Int32" a "Of Decimal" tutto ha funzionato come fascino. – Nick

+0

Grazie per questo, ho lottato con un problema simile per anni – majjam