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());
        }