Пример #1
0
        private async Task <BaseViewModel <PagingResult <BrandViewModel> > > GetAll(BasePagingRequestViewModel request, string defaultCondition = null)
        {
            var pageSize  = request.PageSize;
            var pageIndex = request.PageIndex;
            var result    = new BaseViewModel <PagingResult <BrandViewModel> >();

            string filter = SearchHelper <Brand> .GenerateStringExpression(request.Filter, defaultCondition);

            Expression <Func <Brand, bool> > FilterExpression = await LinqHelper <Brand> .StringToExpression(filter);

            var includeList = IncludeLinqHelper <Brand> .StringToListInclude(request?.Include);

            QueryArgs <Brand> queryArgs = new QueryArgs <Brand>
            {
                Offset  = pageSize * (pageIndex - 1),
                Limit   = pageSize,
                Filter  = FilterExpression,
                Sort    = request.SortBy,
                Include = includeList
            };


            var data = _repository.Get(queryArgs.Filter, queryArgs.Sort, queryArgs.Offset, queryArgs.Limit, queryArgs.Include).ToList();

            //var sql = data.ToSql();

            if (data == null || data.Count == 0)
            {
                result.Description = MessageHandler.CustomMessage(MessageConstants.NO_RECORD);
                result.Code        = MessageConstants.NO_RECORD;
            }
            else
            {
                var pageSizeReturn = pageSize;
                if (data.Count < pageSize)
                {
                    pageSizeReturn = data.Count;
                }
                result.Data = new PagingResult <BrandViewModel>
                {
                    Results      = _mapper.Map <IEnumerable <BrandViewModel> >(data),
                    PageIndex    = pageIndex,
                    PageSize     = pageSizeReturn,
                    TotalRecords = _repository.Count(queryArgs.Filter)
                };
            }

            foreach (var item in result?.Data?.Results)
            {
                var listStore         = _storeRepository.GetMany(_ => _.BrandId == item.Id).ToList();
                var sumRating         = listStore.Sum(_ => _.Rating);
                var sumNumberOfRating = listStore.Sum(_ => _.NumberOfRating);
                item.Location = listStore.Count;
                item.Rating   = sumRating * 1.0 / sumNumberOfRating * 1.0;
            }

            return(result);
        }