public Context( Expression sqlExpr, Expression parametersExpr, Expression orderExpr, Expression queryExpr, Type modelType, Type queryType) { this.SqlExpression = sqlExpr; this.ParametersExpression = parametersExpr; this.OrderExpression = orderExpr; this.QueryExpression = queryExpr; this.ModelType = modelType; this.QueryType = queryType; this.ModelProperties = modelType.GetProperties() .Where(this.IsValidProperty) .ToArray(); this.QueryProperties = queryType.GetProperties(); this.Statements = new List <Expression>(); this.Analyzer = TableCache.GetDialect(this.ModelType); }
protected static string BuildSort <T>(IQuery <T> query) { var analyzer = TableCache.GetDialect(typeof(T)); var sb = new StringBuilder(); if (query.OrderBys != null) { var len = query.OrderBys.Count; if (len > 0) { sb.Append(" ORDER BY"); } var cols = TableCache.GetColumnDescriptors(typeof(T)); for (var index = 0; index < len; index++) { var sort = query.OrderBys[index]; if (cols.All(n => n.DbName != sort.OrderField)) { throw new ArgumentException("query.OrderBys OrderField Not Exist"); } var options = SqlDatabaseOptionsFactory.GetSqlDatabaseOptions(analyzer); var startDelimiter = options.StartDelimiter; var endDelimiter = options.EndDelimiter; sb.Append($" {startDelimiter}{sort.OrderField}{endDelimiter} {sort.OrderDirection}"); if (index != len - 1) { sb.Append(","); } } return(sb.ToString()); } return(string.Empty); }