コード例 #1
0
        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());
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
ファイル: CategoryModel.cs プロジェクト: dotaeye/mb360
        /// <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);
                }
            }
        }