Подтвердить что ты не робот

Группировка каждые n минут

Я играю с LINQ, и мне было интересно, как легко было бы группироваться за считанные минуты, но вместо каждой минуты я хотел бы сгруппировать каждые 5 минут.

Например, в настоящее время у меня есть:

var q = (from cr in JK_ChallengeResponses
        where cr.Challenge_id == 114
        group cr.Challenge_id 
            by new { cr.Updated_date.Date, cr.Updated_date.Hour, cr.Updated_date.Minute } 
            into g 
        select new {
          Day = new DateTime(g.Key.Date.Year, g.Key.Date.Month, g.Key.Date.Day, g.Key.Hour, g.Key.Minute, 0),
          Total = g.Count()
        }).OrderBy(x => x.Day);

enter image description here

Что мне нужно сделать, чтобы сгруппировать мой результат для каждого 5 минут?

4b9b3361

Ответ 1

Чтобы сгруппировать по n что-то, вы можете использовать следующую формулу для создания "ведер":

((int)(total / bucket_size)) * bucket_size

Это будет принимать общее количество, делить его, отбрасывать на целое число, чтобы отбрасывать любые десятичные числа, а затем снова умножаться, что заканчивается краткими значениями bucket_size. Так, например, (/ - целочисленное деление, поэтому кастинг не требуется):

group cr.Challenge_id
    by new { cr.Updated_Date.Year, cr.Updated_Date.Month, 
             cr.Updated_Date.Day, cr.Updated_Date.Hour,
             Minute = (cr.Updated_Date.Minute / 5) * 5 }

Ответ 2

//Данные поступают каждые 3 часа

где (Convert.ToDateTime(capcityprogressrow [ "Data Captured Date" ]. ToString()). Date!= DateTime.Now.Date || (Convert.ToDateTime(capcityprogressrow [ "Дата захвата данных" ]. ToString()).Date == DateTime.Now.Date && (Convert.ToInt16 (capcityprogressrow [ "Data Captured Time" ]))% 3 == 0))                                      group capcityprogressrow с помощью нового {WCGID = Convert.ToInt32 (Conversions.GetIntEntityValue( "WCGID", capcityprogressrow)), WCGName = Conversions.GetEntityValue( "WIRECENTERGROUPNAME", capcityprogressrow).ToString(), DueDate = Convert.ToDateTime(capcityprogressrow [ "Данные Captured Date" ]), DueTime = capcityprogressrow [ "Data Captured Time" ]. ToString()} в WCGDateGroup

//Для orderby с порядком уклонения

.OrderBy(x => x.WcgName).ThenBy(x => x.DataCapturedDateTime).ThenBy(x => x.DataCapturedTime).ToList();