public virtual async Task <IActionResult> GetMaterialsFromMultiCategories(GetMaterialsRequest materialsRequest)
        {
            SectionServerCached section = sectionsCache.GetSectionServerCached(materialsRequest.SectionName, User.Roles);

            if (section == null)
            {
                return(BadRequest($"No component {materialsRequest.SectionName} found in cache"));
            }

            MaterialsServerSection sectionData = section.GetData <MaterialsServerSection>();

            var сategories = categoriesCache.GetAllCategoriesWithChildren(sectionData.CategoriesNames);

            IList <CategoryCached> categories = authorizationService.GetAllowedCategories(User.Roles,
                                                                                          сategories.Values, operationKeysContainer.MaterialAndCommentsRead);

            if (categories.Count == 0)
            {
                return(BadRequest("No categories to show"));
            }

            IEnumerable <int> categoriesIds = categories.Select(x => x.Id).ToArray();

            MaterialsSortOptionsService.MaterialsSortOptions.TryGetValue(materialsRequest.Sort,
                                                                         out Func <IQueryable <Material>, IOrderedQueryable <Material> > sort);

            var options = new MaterialsShowOptions
            {
                CategoriesIds = categoriesIds,
                Page          = materialsRequest.Page,
                PageSize      = sectionData.PageSize,
                Sort          = sort
            };

            using var scope = serviceProvider.CreateScope();
            IMaterialsQueryPresenter materialsQueryPresenter =
                (IMaterialsQueryPresenter)scope.ServiceProvider.GetRequiredService(MaterialsPresenterTypes.GetBySection(section));

            return(await CacheContentAsync(section, categoriesIds,
                                           () => materialsQueryPresenter.GetMaterialsFromMultiCategoryAsync(options), materialsRequest.Page));
        }