public async Task <int> Count(BodyPartClassifications classifications, bool?recentImagesOnly) { var data = GetQueryable(classifications, recentImagesOnly); var results = await data.CountAsync(); return(results); }
private IMongoQueryable <BodyPartReference> GetQueryable(BodyPartClassifications classifications, bool?recentImagesOnly) { var query = _collection.AsQueryable(); if (classifications.Gender.HasValue) { query = query.Where(x => x.Classifications.Gender == classifications.Gender); } if (classifications.BodyPart.HasValue) { query = query.Where(x => x.Classifications.BodyPart == classifications.BodyPart); } 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 <BodyPartReference> Get(BodyPartClassifications 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); }