Linq按日期获取数据组的总和

Ali*_*hşi 8 c# linq group-by sum

我的数据看起来像:

 read_date |  T1  |  T2  |
15.02.2000 |   2  |   3  |
16.02.2000 |   4  |   5  |
15.03.2000 |   2  |   3  |
16.03.2000 |   5  |   4  |
Run Code Online (Sandbox Code Playgroud)

我想获得T1和T2的总和,如下所示:

 read_date |  T1  |  T2  |
   02.2000 |   6  |   8  |
   03.2000 |   7  |   7  |   
Run Code Online (Sandbox Code Playgroud)

我尝试写这样的东西:

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)
             };
Run Code Online (Sandbox Code Playgroud)

但这并没有给出预期的数据.是否有任何例子可以提供每小时数据,每日总和等数据.

谢谢

Dar*_*rov 18

在分组时,您应该只考虑年份和月份:

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)
    };
Run Code Online (Sandbox Code Playgroud)


pho*_*oog 5

首先,我认为你可以跳过匿名类型:

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) 
         };
Run Code Online (Sandbox Code Playgroud)

其次,要按月分组,请使用一些唯一标识月份的值,如下所示:

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) 
         };
Run Code Online (Sandbox Code Playgroud)