Пример #1
0
        public async Task <PagedResult <TEntityModel, TViewModel> > Execute <TEntityModel, TViewModel>(
            IQueryable <TEntityModel> query,
            IDataFilter <TEntityModel> dataFilter,
            IStackIdentity identity)
            where TEntityModel : class
            where TViewModel : class
        {
            var result = new PagedResult <TEntityModel, TViewModel>
            {
                DataFilter = dataFilter
            };

            if (dataFilter != null)
            {
                query = dataFilter.SearchQuery(query);
                query = dataFilter.FilterQuery(query, identity);
            }

            result.Total = query.Count();

            if (dataFilter != null)
            {
                query = dataFilter.SortQuery(query);

                if (dataFilter.Skip > 0)
                {
                    query = query.Skip(dataFilter.Skip);
                }

                if (dataFilter.Take > 0)
                {
                    query = query.Take(dataFilter.Take);
                }
            }

            var entities = await query.ToListAsync();

            var mappingOperationOptions = identity.GetMappingOperations();

            if (mappingOperationOptions == null)
            {
                result.Results = entities.Select(Mapper.Map <TEntityModel, TViewModel>).ToArray();
            }
            else
            {
                result.Results = entities.Select(e => Mapper.Map <TEntityModel, TViewModel>(e, mappingOperationOptions)).ToArray();
            }

            return(result);
        }