private ExecutedWorkoutFilter BuildExecutedWorkoutFilter( int userId, DateTime?startDateTime, DateTime?endDateTime, bool plannedOnly = false) { var filter = new ExecutedWorkoutFilter(); filter.UserId = userId; filter.PlannedOnly = plannedOnly; if (!plannedOnly) //TODO: Rethink. This is kind of kludgey. { if (filter.StartDateTime.HasValue) { filter.StartDateTime = startDateTime; } if (filter.EndDateTime.HasValue) { filter.EndDateTime = endDateTime; } } return(filter); }
public int GetTotalCount(ExecutedWorkoutFilter filter) { var query = _repo.Get(); ApplyQueryFilters(ref query, filter); return(query.Count()); }
private void ApplyQueryFilters(ref IQueryable <ExecutedWorkout> query, ExecutedWorkoutFilter filter) { if (filter == null) { return; } query = query.Where(x => x.CreatedByUserId == filter.UserId); if (filter.PlannedOnly) //TODO: Rethink. This approach is kind of kludgey. Maybe use a base class instead, and check the type. { query = query.Where(x => x.StartDateTime == null && x.EndDateTime == null); } else { if (filter.StartDateTime.HasValue) { query = query.Where(x => x.StartDateTime >= filter.StartDateTime); } else { query = query.Where(x => x.StartDateTime != null); } if (filter.EndDateTime.HasValue) { query = query.Where(x => x.EndDateTime <= filter.EndDateTime); } else { query = query.Where(x => x.EndDateTime != null); } } }
public IEnumerable <ExecutedWorkout> GetFilteredSubset(int firstRecordIndex, short subsetSize, ExecutedWorkoutFilter filter, bool newestFirst) { IQueryable <ExecutedWorkout> query = _repo.Get(); if (filter != null) { ApplyQueryFilters(ref query, filter); } if (newestFirst) { query = query.OrderByDescending(x => x.StartDateTime); } else { query = query.OrderBy(x => x.StartDateTime); } var output = query.Skip(firstRecordIndex).Take(subsetSize); return(output); }