Example #1
0
        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);
        }
Example #2
0
        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);
        }