8

我的数据看起来像:

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

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

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

我试着写这样的东西:

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

但这并没有给出预期的数据。是否有任何示例可以给出数据每小时总和、每日总和等。

谢谢

4

5 回答 5

20

分组时只应考虑年份和月份:

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)
    };
于 2012-07-20T07:10:12.347 回答
6

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

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

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

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) 
         };
于 2012-07-20T07:11:31.690 回答
0

您当前的分组依据将按完整日期分组(即 15.02.2000 而不是 02.2000)。这最终会为每天而不是每月创建一个单独的组。

将 .Month 添加到组中(假设它是一个日期对象):

group s by new { s.read_date.Month} into g
于 2012-07-20T07:09:39.353 回答
0
    static void Main()
    {
        var list = new List<meter_reading>
                       {
                           new meter_reading {Date = new DateTime(2000, 2, 15), T1 = 2, T2 = 3},
                           new meter_reading {Date = new DateTime(2000, 2, 10), T1 = 4, T2 = 5},
                           new meter_reading {Date = new DateTime(2000, 3, 15), T1 = 2, T2 = 3},
                           new meter_reading {Date = new DateTime(2000, 3, 15), T1 = 5, T2 = 4}
                       };
            var sum = list
            .GroupBy(x => GetFirstDayInMonth(x.Date))
            .Select(item => new meter_reading
                                {
                                    Date = item.Key,
                                    T1 = item.Sum(x => x.T1),
                                    T2 = item.Sum(x => x.T2),
                                }).ToList();
    }

    private static DateTime GetFirstDayInMonth(DateTime dateTime)
    {
        return new DateTime(dateTime.Date.Year, dateTime.Date.Month, 1);
    }
于 2012-07-20T07:15:15.340 回答
0
query.OrderBy(o => o.OrderDate)
                .GroupBy(o => DbFunctions.CreateDateTime(o.OrderDate.Year, o.OrderDate.Month, 1, 0, 0, 0))
                       .Select(group => new DateIncomeDto { Date = group.Key.Value, Income = group.Sum(item => item.PayFee ?? 0) });

它对我有用!

于 2016-03-31T07:19:20.840 回答