public async Task <List <EventEntity> > SearchForEvent(RepositoryEventSearchFilter repositoryFilter) { using (var context = _dbContextFactory.CreateDbContext()) { var query = context.EventEntities.Include(x => x.EventTypes).AsNoTracking(); if (!string.IsNullOrEmpty(repositoryFilter.Query)) { query = query.Where(x => x.Name.Contains(repositoryFilter.Query) || x.Description.Contains(repositoryFilter.Query)); } if (repositoryFilter.MinAge.HasValue) { query = query.Where(x => x.MinAge >= repositoryFilter.MinAge); } if (repositoryFilter.MaxAge.HasValue) { query = query.Where(x => x.MaxAge <= repositoryFilter.MaxAge); } if (repositoryFilter.StartTime.HasValue) { query = query.Where(x => x.StartTime.HasValue && x.StartTime == repositoryFilter.StartTime); } if (repositoryFilter.EndTime.HasValue) { query = query.Where(x => x.EndTime.HasValue && x.EndTime == repositoryFilter.EndTime); } if (repositoryFilter.Type.HasValue) { query = query.Where(x => x.EventTypes.Any(x => x.EventTypeId == (long)repositoryFilter.Type)); } if (repositoryFilter.Status.HasValue) { query = query.Where(x => x.EventStatusId == (long)repositoryFilter.Status); } if (repositoryFilter.IsOpenForInvitations.HasValue) { query = query.Where(x => x.IsOpenForInvitations == repositoryFilter.IsOpenForInvitations); } if (repositoryFilter.CityId.HasValue) { query = query.Where(x => (x.CityId == repositoryFilter.CityId) || (!repositoryFilter.IsOnline.HasValue && x.IsOnline.Value)); } if (repositoryFilter.IsOnline.HasValue) { query = query.Where(x => x.IsOnline == repositoryFilter.IsOnline); } return(await query.Include(x => x.EventImageContentEntities).Include(x => x.City).ToListAsync()); } }
public async Task SearchForEventTests(RepositoryEventSearchFilter repositoryFilter) { var result = await _eventRepository.SearchForEvent(repositoryFilter); Assert.AreEqual(1, result.Count); }