Linq get sum of data group by date

17,215

Solution 1

You should only take the year and month into account when grouping:

var result = 
    from s in  meter_readings.Take(10)
    group s by new { date = new DateTime(s.read_date.Year, s.read_date.Month, 1) } into g
    select new
    {
        read_date = g.Key.date,
        T1 = g.Sum(x => x.T1),
        T2 = g.Sum(x => x.T2)
    };

Solution 2

First, I think you can skip the anonymous type:

var result = from s in meter_readings.Take(10) 
         group s by s.read_date into g 
         select new 
         { 
             read_date = g.Key, 
             T1 = g.Sum(x => x.T1), 
             T2 = g.Sum(x => x.T2) 
         };

Second, to group by month, use some value that will uniquely identify the month, like this:

var result = from s in meter_readings.Take(10) 
         group s by s.read_date.ToString("yyyy.MM") into g 
         select new 
         { 
             read_month = g.Key, 
             T1 = g.Sum(x => x.T1), 
             T2 = g.Sum(x => x.T2) 
         };
Share:
17,215
AliRıza Adıyahşi
Author by

AliRıza Adıyahşi

https://github.com/alirizaadiyahsi Contact : [email protected]

Updated on July 05, 2022

Comments

  • AliRıza Adıyahşi
    AliRıza Adıyahşi almost 2 years

    my data look like:

     read_date |  T1  |  T2  |
    15.02.2000 |   2  |   3  |
    16.02.2000 |   4  |   5  |
    15.03.2000 |   2  |   3  |
    16.03.2000 |   5  |   4  |
    

    I want to get mountly sum of T1 and T2, like this:

     read_date |  T1  |  T2  |
       02.2000 |   6  |   8  |
       03.2000 |   7  |   7  |   
    

    I try to write something like this:

    var result = from s in meter_readings.Take(10)
                 group s by new { s.read_date} into g
                 select new
                 {
                     read_date = g.Key.read_date,
                     T1 = g.Sum(x => x.T1),
                     T2 = g.Sum(x => x.T2)
                 };
    

    but this does not give expected data.Is there any example to give data hourly sums, daily sums, etc.

    Thanks