public FilteredCollection <TEntity> GetAll(FilterPagingCriteria pageCriteria, FilterSortCriteria sortCriteria = null)
        {
            IQueryable <TEntity> collection = _context.Set <TEntity>().AppendFilterSortCriteria <TEntity, TId>(sortCriteria).AppendFilterPagingCriteria <TEntity, TId>(pageCriteria);

            return(new FilteredCollection <TEntity>
            {
                Collection = collection,
                TotalCount = Count()
            });
        }
        /// <summary>
        /// applying paging criteria on collection.
        /// To prevent applying this set pageingCriteria.PageNumber = -1
        /// </summary>
        /// <typeparam name="TEntity"></typeparam>
        /// <typeparam name="TId"></typeparam>
        /// <param name="query"></param>
        /// <param name="pageingCriteria"></param>
        /// <returns></returns>
        public static IQueryable <TEntity> AppendFilterPagingCriteria <TEntity, TId>(this IQueryable <TEntity> query, FilterPagingCriteria pageingCriteria) where TEntity : IEntity <TId>
        {
            if (pageingCriteria != null)
            {
                // If paging enabled
                if (pageingCriteria.PageNumber >= 0)
                {
                    int pageSize = pageingCriteria.PageSize > 0 ? pageingCriteria.PageSize : PageSize;

                    // Apply paging
                    query = query.Skip(pageingCriteria.PageNumber * pageingCriteria.PageSize).Take(pageSize);
                }
            }

            return(query);
        }