public async Task <int> CountSpecificationsAsync(SpecificationFilter filter) { IQueryable <Specification> source = _context.Specifications .Include(spec => spec.Schedule) .ThenInclude(schedule => schedule.Broadcast); return(await FilerSpecifications(source, filter).CountAsync()); }
public async Task <List <Specification> > SearchSpecificationsAsync(SpecificationFilter filter) { IQueryable <Specification> source = _context.Specifications .Include(spec => spec.Schedule) .ThenInclude(schedule => schedule.Broadcast) .ThenInclude(broadcast => broadcast.TvProgram) .Include(spec => spec.Schedule) .ThenInclude(Schedule => Schedule.Corner); var specs = await FilerSpecifications(source, filter) .OrderBy(spec => spec.Schedule.Broadcast.AirDate) .ThenBy(spec => spec.Schedule.Broadcast.TvProgramId) .ThenBy(spec => spec.Schedule.Sequence) .Skip((filter.pageIndex - 1) * filter.pageSize) .Take(filter.pageSize) .ToListAsync(); return(specs); }
private IQueryable <Specification> FilerSpecifications(IQueryable <Specification> query, SpecificationFilter filter) { if (filter.TvProgramId != null) { query = query.Where(spec => spec.Schedule.Broadcast.TvProgramId == filter.TvProgramId); } if (filter.AirDateFrom != null || filter.AirDateTo != null) { query = query.Where(spec => filter.AirDateFrom <= spec.Schedule.Broadcast.AirDate && spec.Schedule.Broadcast.AirDate <= filter.AirDateTo); } if (filter.CornerId != null) { query = query.Where(spec => spec.Schedule.CornerId == filter.CornerId); } if (!string.IsNullOrEmpty(filter.Keyword)) { query = query.Where(spec => spec.Title.Contains(filter.Keyword) || spec.Text.Contains(filter.Keyword)); } if (!string.IsNullOrEmpty(filter.Director)) { query = query.Where(spec => spec.Director.Contains(filter.Director)); } if (!string.IsNullOrEmpty(filter.Desk)) { query = query.Where(spec => spec.Desk.Contains(filter.Desk)); } if (filter.ArticleSourceId != null) { query = query.Include(spec => spec.SpecificationArticleSources) .Where(spec => spec.SpecificationArticleSources .Any(sa => sa.ArticleSourceId == filter.ArticleSourceId)); } if (filter.VideoSourceId != null) { query = query.Include(spec => spec.SpecificationVideoSources) .Where(spec => spec.SpecificationVideoSources .Any(sa => sa.VideoSourceId == filter.VideoSourceId)); } return(query); }
/// <summary> /// Prepare model /// </summary> /// <param name="alreadyFilteredSpecOptionIds">IDs of already filtered specification options</param> /// <param name="filterableSpecificationAttributeOptionIds">IDs of filterable specification options</param> /// <param name="specificationAttributeService"></param> /// <param name="webHelper">Web helper</param> /// <param name="workContext">Work context</param> /// <param name="cacheManager">Cache manager</param> public virtual void PrepareSpecsFilters(IList <int> alreadyFilteredSpecOptionIds, int[] filterableSpecificationAttributeOptionIds, ISpecificationAttributeOptionService specificationAttributeOptionService, ICacheManager cacheManager) { var optionIds = filterableSpecificationAttributeOptionIds != null ? string.Join(",", filterableSpecificationAttributeOptionIds) : string.Empty; var cacheKey = string.Format(MBHelper.SPECS_FILTER_MODEL_KEY, optionIds); var allOptions = specificationAttributeOptionService.GetAll() .Include(x => x.SpecificationAttribute) .Where(x => filterableSpecificationAttributeOptionIds.Contains(x.Id)); var allFilters = allOptions.Select(sao => new SpecificationAttributeOptionFilter { SpecificationAttributeId = sao.SpecificationAttribute.Id, SpecificationAttributeName = sao.SpecificationAttribute.Name, SpecificationAttributeDisplayOrder = sao.SpecificationAttribute.DisplayOrder, SpecificationAttributeOptionId = sao.Id, SpecificationAttributeOptionName = sao.Name, SpecificationAttributeOptionDisplayOrder = sao.DisplayOrder }).ToList(); if (!allFilters.Any()) { return; } //sort loaded options allFilters = allFilters.OrderBy(saof => saof.SpecificationAttributeDisplayOrder) .ThenBy(saof => saof.SpecificationAttributeName) .ThenBy(saof => saof.SpecificationAttributeOptionDisplayOrder) .ThenBy(saof => saof.SpecificationAttributeOptionName).ToList(); foreach (var filter in allFilters) { if (!this.FilteredItems.Any(x => x.SpecificationAttributeId == filter.SpecificationAttributeId)) { var specFilter = new SpecificationFilter() { SpecificationAttributeId = filter.SpecificationAttributeId, SpecificationAttributeName = filter.SpecificationAttributeName, DisplayOrder = filter.SpecificationAttributeDisplayOrder }; foreach (var filterOption in allFilters.Where(x => x.SpecificationAttributeId == filter.SpecificationAttributeId)) { if (!specFilter.SpecificationOptions.Any(x => x.SpecificationAttributeOptionId == filterOption.SpecificationAttributeOptionId)) { specFilter.SpecificationOptions.Add(new SpecificationOptionItem() { SpecificationAttributeOptionId = filterOption.SpecificationAttributeOptionId, DisplayOrder = filterOption.SpecificationAttributeOptionDisplayOrder, Checked = alreadyFilteredSpecOptionIds.Contains(filterOption.SpecificationAttributeOptionId), SpecificationAttributeOptionName = filterOption.SpecificationAttributeOptionName }); } } this.FilteredItems.Add(specFilter); } } }