TanerSaydam / TS.GenericRepository.NuGet

8 stars 0 forks source link

Server Side Sayfalama ve Filtreleme Mantığına Uygun GetAll Fonksiyonunun Eklenmesi #4

Open erengaygusuz opened 3 months ago

erengaygusuz commented 3 months ago

Merhaba, GetAll fonksiyonlarında server side sayfalama için hazırlanmış bir fonksiyon yok. Aşağıdaki yapıya benzer sayfalama ve filtreleme mantığına uygun bir fonksiyon ekleyebilir misiniz? Ayrıca bu fonksiyonu result pattern eklentinizle uyumlu hale de getirebilirsiniz.

        public Tuple<int, int, IQueryable<TEntity>> GetAll(
            int page, int pageSize,
            Expression<Func<TEntity, bool>>? expression = null,
            bool trackChanges = false,
            Func<IQueryable<TEntity>, IIncludableQueryable<TEntity, object>>? include = null,
            Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>>? orderBy = null)
        {
            IQueryable<TEntity> query = _appDbContext.Set<TEntity>();

            if (include != null)
            {
                query = include(query);
            }

            int totalCount = query.Count();
            int filteredCount = totalCount;

            if (expression != null)
            {
                query = query.Where(expression);
                filteredCount = query.Count();
            }

            if (orderBy != null)
            {
                query = orderBy(query);
            }

            query = query.Skip((page - 1) * pageSize).Take(pageSize);

            if (!trackChanges)
            {
                query = query.AsNoTracking();
            }

            return new Tuple<int, int, IQueryable<TEntity>>(totalCount, filteredCount, query);
        }