/// <summary>
        /// Used for datatables. Handles sorting and paging.
        /// </summary>
        /// <typeparam name="DatabaseClass"></typeparam>
        /// <typeparam name="DomainClass"></typeparam>
        /// <param name="query"></param>
        /// <param name="paging"></param>
        /// <param name="mapper">Provide mapper that implements IDomainSideMapper. (that is in Mapper.Interface)</param>
        /// <returns></returns>
        protected PagingCollectionDTO <object> CreatePagingCollection <DatabaseClass, DomainClass>(IQueryable <DatabaseClass> query, IPaging paging, IDomainSideMapper <DatabaseClass, DomainClass> mapper)
            where DatabaseClass : class, new()
            where DomainClass : BaseDTO, new()
        {
            PagingCollectionDTO <object> pagingCollection = new PagingCollectionDTO <object>();

            if (string.IsNullOrEmpty(paging.OrderByColumnName))
            {
                paging.OrderByColumnName = "Id";
            }

            if (paging.SortingOrder == Enumerators.SortOrderEnum.Ascending)
            {
                query = query.OrderBy(paging.OrderByColumnName);
            }
            else
            {
                query = query.OrderByDescending(paging.OrderByColumnName);
            }

            pagingCollection.NumOfTotalRecords = query.Count();

            query = query.Skip(paging.NumElementsPerPage * (paging.CurrentPageIndex - 1));
            query = query.Take(paging.NumElementsPerPage);

            var items = query.ToList();

            var mappedItems = mapper.ToDtoList(items);

            pagingCollection.Items = mappedItems.Cast <object>().ToList();

            return(pagingCollection);
        }
Exemplo n.º 2
0
        public PagingCollectionDTO <object> GetFiltered(object filter)
        {
            // Every filter has to derive from PagingDTO
            var serializedFilter = HandleObjectDeserialization <TestCodebookFilterDTO>(filter);

            // Apply filters
            var query = this._db.AsQueryable();

            // best practice is to set filters in other method to have clean code
            query = ApplyFilters(query, serializedFilter);

            // Result is always sent in PagingCollectionDTO<>
            PagingCollectionDTO <TestCodebookDTO> result = new PagingCollectionDTO <TestCodebookDTO>();

            return(CreatePagingCollection(query, serializedFilter, _mapper));
        }