public async Task <PagedResultDto <CategoriesListDto> > GetAllCategories(GetAllCategoriesInput input)
        {
            var filteredCategories = _categoryRepository.GetAll().AsNoTracking()
                                     .WhereIf(!string.IsNullOrWhiteSpace(input.Filter), e =>
                                              e.Name.StringValue.ToLower().Contains(input.Filter.ToLower().Trim()) ||
                                              !string.IsNullOrEmpty(e.Code) && e.Code.ToLower().Trim().Contains(input.Filter.ToLower().Trim()));

            var query = from category in filteredCategories
                        join itemclass in _itemclassRepository.GetAll().AsNoTracking() on category.Id equals itemclass.Id into itemclasses
                        from itemclass in itemclasses.DefaultIfEmpty()
                        select new CategoriesListDto
            {
                Id            = category.Id,
                Code          = category.Code,
                Name          = category.Name.CurrentCultureText,
                Description   = category.Description.CurrentCultureText,
                ItemClassName = itemclass == null ? "" : itemclass.Name.CurrentCultureText,
                IsActive      = category.IsActive
            };
            var totalCount = await query.CountAsync();

            var categories = await query.OrderBy(input.Sorting ?? "id desc").PageBy(input).ToListAsync();

            return(new PagedResultDto <CategoriesListDto>(totalCount, categories));
        }
        public async Task <PagedResultDto <GetCategoryForViewDto> > GetAll(GetAllCategoriesInput input)
        {
            var filteredCategories = _categoryRepository.GetAll()
                                     .WhereIf(!string.IsNullOrWhiteSpace(input.Filter), e => false || e.Name.Contains(input.Filter) || e.Description.Contains(input.Filter))
                                     .WhereIf(!string.IsNullOrWhiteSpace(input.NameFilter), e => e.Name == input.NameFilter)
                                     .WhereIf(!string.IsNullOrWhiteSpace(input.DescriptionFilter), e => e.Description == input.DescriptionFilter)
                                     .WhereIf(input.IsApprovedFilter > -1, e => (input.IsApprovedFilter == 1 && e.IsApproved) || (input.IsApprovedFilter == 0 && !e.IsApproved))
                                     .WhereIf(input.IsActiveFilter > -1, e => (input.IsActiveFilter == 1 && e.IsActive) || (input.IsActiveFilter == 0 && !e.IsActive));

            var pagedAndFilteredCategories = filteredCategories
                                             .OrderBy(input.Sorting ?? "id asc")
                                             .PageBy(input);

            var categories = from o in pagedAndFilteredCategories
                             select new GetCategoryForViewDto()
            {
                Category = new CategoryDto
                {
                    Name        = o.Name,
                    Description = o.Description,
                    IsApproved  = o.IsApproved,
                    IsActive    = o.IsActive,
                    Id          = o.Id
                }
            };

            var totalCount = await filteredCategories.CountAsync();

            return(new PagedResultDto <GetCategoryForViewDto>(
                       totalCount,
                       await categories.ToListAsync()
                       ));
        }