Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

LinQ Sum Distinct Values Quantity and Total

Tags:

c#

sql

linq

I have this table :

Con   Fecha           Rid       Pdv   Pla   Descripcion       Total Quantity
----------------------------------------------------------------------------
1     2016-01-01    COMIDAS    FUEM   184   POZ ROJO           85      1
10    2016-01-01    DESAYUNOS  VTSI   184   POZ ROJO           85      4
100   2016-01-01    COMIDAS    VTSI   693   ENVASE 1 LT        10      1
101   2016-01-01    DESAYUNOS  REST   693   ENVASE 1 LT        10      2
102   2016-01-01    COMIDAS    VTSI   693   ENVASE 1 LT        10      1
103   2016-01-01    COMIDAS    REST   73    NOPAL/PIÑA VASO    34      6
104   2016-01-01    DESAYUNOS  REST   73    NOPAL/PIÑA VASO    34      1
105   2016-01-01    DESAYUNOS  REST   184   POZ ROJO           85      9
106   2016-01-01    COMIDAS    VTSI   693   ENVASE 1 LT        10      1
107   2016-01-01    CENAS      REST   184   POZ ROJO           85      2
108   2016-01-01    DESAYUNOS  REST   184   POZ ROJO           85      1

What I need is a Linq statement that sums all 'Quantity's' on each item that is unique based on the 'Pla' data that is my primary key, I want to know how much 'Quantity' each Distinct 'Pla' has and also sum the total of each distinct 'Pla' resulting in an output like this:

Con   Fecha           Rid       Pdv   Pla   Descripcion       Total Quantity
----------------------------------------------------------------------------
1     2016-01-01    COMIDAS    FUEM   184   POZ ROJO           1445    17
100   2016-01-01    COMIDAS    VTSI   693   ENVASE 1 LT         50     5
103   2016-01-01    COMIDAS    REST   73    NOPAL/PIÑA VASO     34     6
104   2016-01-01    DESAYUNOS  REST   73    NOPAL/PIÑA VASO     34     1

How can I get this output with a Linq statement? All I have until now is:

 foreach (var item in db.Pos.Select(l => l.Pla).Distinct())
 {
      //Do stuff
 }
like image 291
Arturo Martinez Avatar asked Feb 08 '23 15:02

Arturo Martinez


2 Answers

You need to use groupby

db.Pos.GroupBy(a=> a.Pla).Select(p=> new {Pla = p.Key, Quantity = p.Sum(q=>q.Quantity)});

GroupBy returns key as distinct so you will get distinct values for Pla with sum of their respective quantity

like image 176
Mujassir Nasir Avatar answered Feb 16 '23 02:02

Mujassir Nasir


You can GroupBy the elements by Pla values and Sum the Total and Quantity values of each element in the group:

var plas = db.Pos.GroupBy(p => p.Pla).Select(g => new
{
    Pla = g.Key,
    Total = g.Sum(t => t.Total),
    Quantity = g.Sum(t => t.Quantity)
});
like image 31
Arturo Menchaca Avatar answered Feb 16 '23 04:02

Arturo Menchaca