public IEnumerable <LoggedDayGroup> TryGetAllLoggedDayGroups(IEnumerable <LoggedDay> loggedDays, int trackerId, GroupSortOption sortOption) { SortOption = sortOption; return(LoggedDays.Where(day => day.TrackerId == trackerId) .GroupBy(day => day.Date.Date, (day, group) => new LoggedDayGroup { Date = day, Count = group.Count() })); }
private IEnumerable <LoggedDayGroup> GetAllLoggedDayGroups(IEnumerable <LoggedDay> loggedDays, int trackerId, GroupSortOption sortOption) { loggedDays = loggedDays ?? throw new ArgumentNullException(nameof(loggedDays)); var groups = loggedDays .Where(day => day.TrackerId == trackerId) .GroupBy(day => day.Date.Date, (day, group) => new LoggedDayGroup { Date = day, Count = group.Count() }); groups = sortOption switch { GroupSortOption.DateDescending => groups.OrderByDescending(group => group.Date), GroupSortOption.DateAscending => groups.OrderBy(group => group.Date), GroupSortOption.CountDescending => groups.OrderByDescending(group => group.Count), _ => throw new NotImplementedException($"Sort option '{sortOption}' not supported.") }; return(groups); }
public IEnumerable <LoggedDayGroup> TryGetAllLoggedDayGroups(IEnumerable <LoggedDay> loggedDays, int trackerId, GroupSortOption sortOption) => null;
/// <summary> /// Gets all <see cref="LoggedDay"/>s as <see cref="LoggedDayGroup"/>s for a given tracker id. /// </summary> /// <param name="loggedDays">Logged days to group.</param> /// <param name="trackerId">Tracker id of the logged days to get.</param> /// <param name="sortOption">Specifies the way to sort the results.</param> /// <returns>All logged day groups under the given tracker, in the given sort order.</returns> public IEnumerable <LoggedDayGroup> TryGetAllLoggedDayGroups(IEnumerable <LoggedDay> loggedDays, int trackerId, GroupSortOption sortOption) => Try.Run(() => GetAllLoggedDayGroups(loggedDays, trackerId, sortOption), ex => _logger.Error(ex, $"Failed to get all logged day groups for tracker id {trackerId}."));