public async Task <int> Count(AnimalClassifications classifications, bool?recentImagesOnly) { var data = GetQueryable(classifications, recentImagesOnly); var results = await data.CountAsync(); return(results); }
private IMongoQueryable <AnimalReference> GetQueryable(AnimalClassifications classifications, bool?recentImagesOnly) { var query = _collection.AsQueryable(); if (classifications.Category.HasValue) { query = query.Where(x => x.Classifications.Category == classifications.Category); } if (classifications.Species.HasValue) { query = query.Where(x => x.Classifications.Species == classifications.Species); } if (classifications.ViewAngle.HasValue) { query = query.Where(x => x.Classifications.ViewAngle == classifications.ViewAngle); } if (recentImagesOnly == true) { // get the most recent upload, then include anything within 30 days of that } query = query.Where(x => x.Status == Status.Active); return(query); }
public async Task <AnimalReference> Get(AnimalClassifications classifications, List <string> excludeIds, bool?recentImagesOnly) { var data = GetQueryable(classifications, recentImagesOnly); data = data.Where(x => !excludeIds.Contains(x.Id)); var recordCount = await data.CountAsync(); if (recordCount == 0) { return(null); } var random = RandomGenerator.Next(0, recordCount); var result = data.Skip(random).First(); return(result); }