public static dynamic GetAutoQuery <TEntity>(string queryString, Type entityType, IQueryable <TEntity> query, AutoQueryableProfile profile) where TEntity : class { if (string.IsNullOrEmpty(queryString)) { IEnumerable <string> columns = SelectHelper.GetSelectableColumns(profile?.UnselectableProperties, entityType); return(query.Select(SelectHelper.GetSelector <TEntity>(string.Join(",", columns.ToArray())))); } string[] queryStringParts = queryString.Replace("?", "").Split('&'); IList <Criteria> criterias = CriteriaManager.GetCriterias(entityType, queryStringParts).ToList(); IList <Clause> clauses = ClauseManager.GetClauses(queryStringParts).ToList(); Clause wrapWithClause = clauses.FirstOrDefault(c => c.ClauseType == ClauseType.WrapWith); var countAllRows = false; IEnumerable <WrapperPartType> wrapperParts = null; if (wrapWithClause != null) { wrapperParts = WrapperManager.GetWrapperParts(wrapWithClause.Value.Split(',')).ToList(); countAllRows = wrapperParts.Contains(WrapperPartType.TotalCount); } QueryResult queryResult = QueryBuilder.Build(query, entityType, clauses, criterias, profile?.UnselectableProperties, countAllRows); if (wrapWithClause == null) { return(queryResult.Result); } return(WrapperManager.GetWrappedResult(wrapperParts, queryResult, clauses, queryString)); }
public Clause(string clause, ClauseDisplay clauseDisplay, ClauseManager owner) { this.clause = clause; typeIndex = 0; this.clauseDisplay = clauseDisplay; clauseDisplay.setClause(clause); this.owner = owner; }