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; }
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)); }
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); }
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); }