public AutoQueryHandler(IQueryStringAccessor queryStringAccessor, ICriteriaFilterManager criteriaFilterManager, IClauseMapManager clauseMapManager, IClauseValueManager clauseValueManager)
 {
     _queryStringAccessor   = queryStringAccessor;
     _criteriaFilterManager = criteriaFilterManager;
     _clauseMapManager      = clauseMapManager;
     _clauseValueManager    = clauseValueManager;
 }
 public AutoQueryHandler(IQueryStringAccessor queryStringAccessor, ICriteriaFilterManager criteriaFilterManager, IClauseMapManager clauseMapManager, IClauseValueManager clauseValueManager, IAutoQueryableProfile profile)
 {
     _queryStringAccessor   = queryStringAccessor;
     _criteriaFilterManager = criteriaFilterManager;
     _clauseMapManager      = clauseMapManager;
     _clauseValueManager    = clauseValueManager;
     _profile = profile;
 }
 public AutoQueryHandler(IQueryStringAccessor queryStringAccessor, ICriteriaFilterManager criteriaFilterManager, IClauseMapManager clauseMapManager, IClauseValueManager clauseValueManager, IAutoQueryableProfile profile,
                         StaticMappingDescription staticMappingDescription = null)
 {
     _queryStringAccessor   = queryStringAccessor;
     _criteriaFilterManager = criteriaFilterManager;
     _clauseMapManager      = clauseMapManager;
     _clauseValueManager    = clauseValueManager;
     _profile = profile;
     _staticMappingDescription = staticMappingDescription;
 }
Beispiel #4
0
        public static dynamic Build <T>(IClauseValueManager clauseValueManager, ICriteriaFilterManager criteriaFilterManager, IQueryable <T> query, ICollection <Criteria> criterias, IAutoQueryableProfile profile) where T : class
        {
            if (criterias != null && criterias.Any())
            {
                query = _addCriterias(criteriaFilterManager, query, criterias);
            }
            query = _addOrderBy(query, clauseValueManager.OrderBy, profile);

            TotalCountQuery = query;
            if (clauseValueManager.First)
            {
                return(query.FirstOrDefault());
            }
            if (clauseValueManager.Last)
            {
                return(query.LastOrDefault());
            }
            query = _handlePaging(clauseValueManager, query, profile);
            //if (profile?.MaxToTake != null)
            //{
            //    queryProjection = profile.UseBaseType ? ((IQueryable<T>)queryProjection).Take(profile.MaxToTake.Value) : queryProjection.Take(profile.MaxToTake.Value);
            //}

            IQueryable <dynamic> queryProjection = query;

            if (clauseValueManager.Select.Any() || profile?.UnselectableProperties != null || profile?.SelectableProperties != null)
            {
                if (profile != null)
                {
                    if (profile.ToListBeforeSelect)
                    {
                        query = query.ToList().AsQueryable();
                    }
                    queryProjection = profile.UseBaseType ?
                                      query.Select(SelectHelper.GetSelector <T, T>(clauseValueManager.Select, profile)) : query.Select(SelectHelper.GetSelector <T, object>(clauseValueManager.Select, profile));
                }
            }

            return(queryProjection.HandleWrapping(clauseValueManager));
        }
Beispiel #5
0
        private static IQueryable <T> _handlePaging <T>(IClauseValueManager clauseValueManager, IQueryable <T> query, IAutoQueryableProfile profile) where T : class
        {
            if (clauseValueManager.Skip.HasValue)
            {
                if (profile?.MaxToSkip != null && clauseValueManager.Skip > profile.MaxToSkip)
                {
                    clauseValueManager.Skip = profile.MaxToSkip.Value;
                }
                query = query.Skip(clauseValueManager.Skip.Value);
            }
            // ReturnAllValues or DefaultToTake = 0 => return ALL values
            if (clauseValueManager.ReturnAllValues || profile == null || profile.DefaultToTake == 0)
            {
                return(query);
            }

            if (clauseValueManager.Top.HasValue)
            {
                if (profile?.MaxToTake != null && clauseValueManager.Top > profile.MaxToTake)
                {
                    clauseValueManager.Top = profile.MaxToTake.Value;
                }
                query = query.Take(clauseValueManager.Top.Value);
            }
            else if (profile?.MaxToTake != null)
            {
                query = query.Take(profile.MaxToTake.Value);
            }
            else
            {
                if (profile != null && profile.DefaultToTake != 0)
                {
                    query = query.Take(profile.DefaultToTake);
                }
            }

            return(query);
        }
Beispiel #6
0
        public static dynamic HandleWrapping <TEntity>(this IQueryable <TEntity> query, IClauseValueManager clauseValueManager) where TEntity : class
        {
            if (!clauseValueManager.WrapWith.Any() || clauseValueManager.First)
            {
                return(query);
            }
            var result = query;

            var wrapper = new ExpandoObject() as IDictionary <string, Object>;

            wrapper.Add("result", result);
            foreach (string wrapperPart in clauseValueManager.WrapWith)
            {
                if (wrapperPart == WrapperAlias.Count)
                {
                    wrapper.Add(WrapperAlias.Count, result.Count());
                }
                else if (wrapperPart == WrapperAlias.TotalCount)
                {
                    wrapper.Add(WrapperAlias.TotalCount, TotalCountQuery.Count());
                }
            }

            return(wrapper);
        }