Esempio n. 1
0
        public static DateTime TruncatedBy(this DateTime date, TimeRangeAggregationTypes truncateSize)
        {
            switch (truncateSize)
            {
            case TimeRangeAggregationTypes.Hourly:
                return(date.TruncatedHourly());

            case TimeRangeAggregationTypes.Daily:
            default:
                return(date.TruncatedDaily());
            }
        }
Esempio n. 2
0
        public static async Task <DataItem[]> GetAggregatedStats(ActionType actionType, DateTime?dateFrom = null, DateTime?dateTo = null, TimeRangeAggregationTypes truncateSize = TimeRangeAggregationTypes.Hourly)
        {
            var statsQuery = _dbContext.Stats
                             .AsNoTracking()
                             .Where(x => x.ActionType == actionType);

            if (dateFrom.HasValue)
            {
                statsQuery = statsQuery.Where(x => x.DateTime >= dateFrom);
            }

            if (dateTo.HasValue)
            {
                statsQuery = statsQuery.Where(x => x.DateTime < dateTo);
            }

            var stats = await statsQuery.ToListAsync();

            var aggregatedStats = stats
                                  .GroupBy(x => x.DateTime.TruncatedBy(truncateSize))
                                  .Select(x =>
                                          new DataItem
            {
                Date  = x.First().DateTime,
                Count = x.Count()
            })
                                  .ToArray();

            return(aggregatedStats);
        }