public async Task <Result <Category> > GetAsync(Criteria <DateRange> dateRangeCriteria) { // Validate criteria. if (dateRangeCriteria == null) { return(new Result <Category>() { Message = "Invalid criteria" }); } if (dateRangeCriteria.Value != null && dateRangeCriteria.Value.From > dateRangeCriteria.Value.To) { return(new Result <Category>() { Message = "Invalid criteria" }); } // Fetch the Category. var category = await Repository.GetAsync(dateRangeCriteria.PrimaryId); if (category == null) { return(new Result <Category>() { Message = "The category could not be found." }); } // Finding the Category means success regardless of DataPoint DateRange query result. var result = new Result <Category>(); result.Message = $"{nameof(Category)} '{category.ToString()}' found"; result.Success = true; result.Value = category; // Fetch the DataPoints for the Category with DateRange if requested. if (dateRangeCriteria.Value != null) { var dataPointsQuery = ChildRepository.GetQueryable().Where(d => d.CategoryId == category.Id); if (dateRangeCriteria.Value.To > DateTime.MinValue) { dataPointsQuery = dataPointsQuery.Where(d => d.Stamp >= dateRangeCriteria.Value.From && d.Stamp <= dateRangeCriteria.Value.To); } result.Value.DataPoints = (await ChildRepository.GetAsync(dataPointsQuery))? .OrderBy(d => d.Stamp) .ToList(); } return(result); }