private IEnumerable<GameStats> FilterGames(IEnumerable<GameStats> games) { var selectedGameMode = (GameMode)ComboboxGameMode.SelectedItem; var noteFilter = TextboxNoteFilter.Text; var comboboxString = (TimeFrame)ComboboxTime.SelectedItem; var endTime = DateTime.Today + new TimeSpan(0, 23, 59, 59, 999); var startTime = DateTime.Today; switch(comboboxString) { case Today: endTime = DateTime.Now; break; case Yesterday: startTime -= new TimeSpan(1, 0, 0, 0); endTime -= new TimeSpan(1, 0, 0, 0); break; case Last24Hours: startTime = DateTime.Now - new TimeSpan(1, 0, 0, 0); endTime = DateTime.Now; break; case ThisWeek: startTime -= new TimeSpan(((int)(startTime.DayOfWeek) - 1), 0, 0, 0); break; case PreviousWeek: startTime -= new TimeSpan(7 + ((int)(startTime.DayOfWeek) - 1), 0, 0, 0); endTime -= new TimeSpan(((int)(endTime.DayOfWeek)), 0, 0, 0); break; case Last7Days: startTime -= new TimeSpan(7, 0, 0, 0); break; case ThisMonth: startTime -= new TimeSpan(startTime.Day - 1, 0, 0, 0); break; case PreviousMonth: startTime -= new TimeSpan(startTime.Day - 1 + DateTime.DaysInMonth(startTime.AddMonths(-1).Year, startTime.AddMonths(-1).Month), 0, 0, 0); endTime -= new TimeSpan(endTime.Day, 0, 0, 0); break; case ThisYear: startTime -= new TimeSpan(startTime.DayOfYear - 1, 0, 0, 0); break; case PreviousYear: startTime -= new TimeSpan(startTime.DayOfYear - 1 + (DateTime.IsLeapYear(startTime.Year) ? 366 : 365), 0, 0, 0); endTime -= new TimeSpan(startTime.DayOfYear, 0, 0, 0); break; case AllTime: startTime = new DateTime(); break; } return games.Where( g => (g.GameMode == selectedGameMode || selectedGameMode == GameMode.All) && g.StartTime >= startTime && g.StartTime <= endTime && (g.Note == null && noteFilter == string.Empty || g.Note != null && g.Note.ToLowerInvariant().Contains(noteFilter.ToLowerInvariant()))); }
private Tuple<DateTime, DateTime> GetFilterTimes(TimeFrame tf) { var startTime = DateTime.Today; var endTime = DateTime.Today + new TimeSpan(0, 23, 59, 59, 999); switch (TimeFrame) { case TimeFrame.Today: endTime = DateTime.Now; break; case TimeFrame.Yesterday: startTime -= new TimeSpan(1, 0, 0, 0); endTime -= new TimeSpan(1, 0, 0, 0); break; case TimeFrame.Last24Hours: startTime = DateTime.Now - new TimeSpan(1, 0, 0, 0); endTime = DateTime.Now; break; case TimeFrame.ThisWeek: startTime -= new TimeSpan(((int)(startTime.DayOfWeek) - 1), 0, 0, 0); break; case TimeFrame.PreviousWeek: startTime -= new TimeSpan(7 + ((int)(startTime.DayOfWeek) - 1), 0, 0, 0); endTime -= new TimeSpan(((int)(endTime.DayOfWeek)), 0, 0, 0); break; case TimeFrame.Last7Days: startTime -= new TimeSpan(7, 0, 0, 0); break; case TimeFrame.ThisMonth: startTime -= new TimeSpan(startTime.Day - 1, 0, 0, 0); break; case TimeFrame.PreviousMonth: startTime -= new TimeSpan(startTime.Day - 1 + DateTime.DaysInMonth(startTime.AddMonths(-1).Year, startTime.AddMonths(-1).Month), 0, 0, 0); endTime -= new TimeSpan(endTime.Day, 0, 0, 0); break; case TimeFrame.ThisYear: startTime -= new TimeSpan(startTime.DayOfYear - 1, 0, 0, 0); break; case TimeFrame.PreviousYear: startTime -= new TimeSpan(startTime.DayOfYear - 1 + (DateTime.IsLeapYear(startTime.Year) ? 366 : 365), 0, 0, 0); endTime -= new TimeSpan(startTime.DayOfYear, 0, 0, 0); break; default: startTime = new DateTime(); break; } return new Tuple<DateTime, DateTime>(startTime, endTime); }