private void ApplyFilter(IQueryable<IPackage> query, PackageSearchFilter filter) { if (!string.IsNullOrEmpty(filter.Title)) { query = query.Where(x => x.Title == filter.Title); } if (filter.Tags != null && filter.Tags.Any()) { filter.Tags.Aggregate(query, (current, tag) => current.Where(p => p.Tags.Contains(tag))); } }
public IPagedResult<PackageDto> SearchThemes(PackageSearchFilter filter) { if (filter == null) { throw new ArgumentNullException("filter", "The package search filter cannot be null."); } IQueryable<IPackage> query = this.themePackageManager.SourceRepository.GetPackages(); IQueryable<IPackage> queryCount = this.themePackageManager.SourceRepository.GetPackages(); this.ApplyFilter(query, filter); this.ApplyFilter(queryCount, filter); List<IPackage> result = query.OrderBy(p => p.Id) .Skip(filter.PageIndex) .Take(filter.PageSize) .ToList(); return new PagedResult<PackageDto>(filter.PageIndex, filter.PageSize, result.MapTo<PackageDto>(), queryCount.Count()); }