mirror of
				https://github.com/nsnail/FreeSql.git
				synced 2025-11-04 01:05:27 +08:00 
			
		
		
		
	- 增加 ISelect.ToSql 字段别名设置,默认为 AsIndex,可改为 AsProperty;#158
This commit is contained in:
		@@ -25,6 +25,7 @@ namespace FreeSql.Internal
 | 
			
		||||
            _common = common;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        internal const int ReadAnonymousFieldAsCsName = -53129;
 | 
			
		||||
        public bool ReadAnonymousField(List<SelectTableInfo> _tables, StringBuilder field, ReadAnonymousTypeInfo parent, ref int index, Expression exp, Func<Expression[], string> getSelectGroupingMapString, List<LambdaExpression> whereCascadeExpression, bool isAllDtoMap)
 | 
			
		||||
        {
 | 
			
		||||
            Func<ExpTSC> getTSC = () => new ExpTSC { _tables = _tables, getSelectGroupingMapString = getSelectGroupingMapString, tbtype = SelectTableInfoType.From, isQuoteName = true, isDisableDiyParse = false, style = ExpressionStyle.Where, whereCascadeExpression = whereCascadeExpression };
 | 
			
		||||
@@ -37,6 +38,7 @@ namespace FreeSql.Internal
 | 
			
		||||
                    parent.DbField = $"-({ExpressionLambdaToSql(exp, getTSC())})";
 | 
			
		||||
                    field.Append(", ").Append(parent.DbField);
 | 
			
		||||
                    if (index >= 0) field.Append(" as").Append(++index);
 | 
			
		||||
                    else if (index == ReadAnonymousFieldAsCsName && string.IsNullOrEmpty(parent.CsName) == false) field.Append(" ").Append(parent.CsName);
 | 
			
		||||
                    return false;
 | 
			
		||||
                case ExpressionType.Convert: return ReadAnonymousField(_tables, field, parent, ref index, (exp as UnaryExpression)?.Operand, getSelectGroupingMapString, whereCascadeExpression, isAllDtoMap);
 | 
			
		||||
                case ExpressionType.Constant:
 | 
			
		||||
@@ -54,6 +56,7 @@ namespace FreeSql.Internal
 | 
			
		||||
                        parent.DbField = _common.FormatSql("{0}", constExp?.Value);
 | 
			
		||||
                    field.Append(", ").Append(parent.DbField);
 | 
			
		||||
                    if (index >= 0) field.Append(" as").Append(++index);
 | 
			
		||||
                    else if (index == ReadAnonymousFieldAsCsName && string.IsNullOrEmpty(parent.CsName) == false) field.Append(" ").Append(parent.CsName);
 | 
			
		||||
                    return false;
 | 
			
		||||
                case ExpressionType.Call:
 | 
			
		||||
                    var callExp = exp as MethodCallExpression;
 | 
			
		||||
@@ -70,6 +73,7 @@ namespace FreeSql.Internal
 | 
			
		||||
                        parent.DbField = ExpressionLambdaToSql(exp, getTSC());
 | 
			
		||||
                    field.Append(", ").Append(parent.DbField);
 | 
			
		||||
                    if (index >= 0) field.Append(" as").Append(++index);
 | 
			
		||||
                    else if (index == ReadAnonymousFieldAsCsName && string.IsNullOrEmpty(parent.CsName) == false) field.Append(" ").Append(parent.CsName);
 | 
			
		||||
                    return false;
 | 
			
		||||
                case ExpressionType.Parameter:
 | 
			
		||||
                case ExpressionType.MemberAccess:
 | 
			
		||||
@@ -102,6 +106,7 @@ namespace FreeSql.Internal
 | 
			
		||||
                        parent.DbField = ExpressionLambdaToSql(exp, getTSC());
 | 
			
		||||
                        field.Append(", ").Append(parent.DbField);
 | 
			
		||||
                        if (index >= 0) field.Append(" as").Append(++index);
 | 
			
		||||
                        else if (index == ReadAnonymousFieldAsCsName && string.IsNullOrEmpty(parent.CsName) == false) field.Append(" ").Append(parent.CsName);
 | 
			
		||||
                        parent.MapType = SearchColumnByField(_tables, null, parent.DbField)?.Attribute.MapType ?? exp.Type;
 | 
			
		||||
                        return false;
 | 
			
		||||
                    }
 | 
			
		||||
@@ -219,6 +224,7 @@ namespace FreeSql.Internal
 | 
			
		||||
            parent.DbField = $"({ExpressionLambdaToSql(exp, getTSC())})";
 | 
			
		||||
            field.Append(", ").Append(parent.DbField);
 | 
			
		||||
            if (index >= 0) field.Append(" as").Append(++index);
 | 
			
		||||
            else if (index == ReadAnonymousFieldAsCsName && string.IsNullOrEmpty(parent.CsName) == false) field.Append(" ").Append(parent.CsName);
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
        public object ReadAnonymous(ReadAnonymousTypeInfo parent, DbDataReader dr, ref int index, bool notRead, ReadAnonymousDbValueRef dbValue)
 | 
			
		||||
 
 | 
			
		||||
@@ -525,11 +525,11 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
            return ToListMrPrivate<TReturn>(sql, af, otherData);
 | 
			
		||||
        }
 | 
			
		||||
        protected List<TReturn> ToListMapReader<TReturn>((ReadAnonymousTypeInfo map, string field) af) => ToListMapReaderPrivate<TReturn>(af, null);
 | 
			
		||||
        protected (ReadAnonymousTypeInfo map, string field) GetExpressionField(Expression newexp)
 | 
			
		||||
        protected (ReadAnonymousTypeInfo map, string field) GetExpressionField(Expression newexp, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex)
 | 
			
		||||
        {
 | 
			
		||||
            var map = new ReadAnonymousTypeInfo();
 | 
			
		||||
            var field = new StringBuilder();
 | 
			
		||||
            var index = 0;
 | 
			
		||||
            var index = fieldAlias == FieldAliasOptions.AsProperty ? CommonExpression.ReadAnonymousFieldAsCsName : 0;
 | 
			
		||||
 | 
			
		||||
            _commonExpression.ReadAnonymousField(_tables, field, map, ref index, newexp, null, _whereCascadeExpression, true);
 | 
			
		||||
            return (map, field.Length > 0 ? field.Remove(0, 2).ToString() : null);
 | 
			
		||||
@@ -1059,9 +1059,9 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
        protected TSelect InternalOrderByDescending(Expression column) => this.OrderBy($"{_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, column, true, null)} DESC");
 | 
			
		||||
 | 
			
		||||
        protected List<TReturn> InternalToList<TReturn>(Expression select) => this.ToListMapReader<TReturn>(this.GetExpressionField(select));
 | 
			
		||||
        protected string InternalToSql<TReturn>(Expression select)
 | 
			
		||||
        protected string InternalToSql<TReturn>(Expression select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex)
 | 
			
		||||
        {
 | 
			
		||||
            var af = this.GetExpressionField(select);
 | 
			
		||||
            var af = this.GetExpressionField(select, fieldAlias);
 | 
			
		||||
            return this.ToSql(af.field);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -121,11 +121,11 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
            return this.InternalToDataTable(select?.Body);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        string ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>.ToSql<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TReturn>> select)
 | 
			
		||||
        string ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>.ToSql<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TReturn>> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex)
 | 
			
		||||
        {
 | 
			
		||||
            if (select == null) return this.InternalToSql<TReturn>(select?.Body);
 | 
			
		||||
            if (select == null) return this.InternalToSql<TReturn>(select?.Body, fieldAlias);
 | 
			
		||||
            for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
 | 
			
		||||
            return this.InternalToSql<TReturn>(select?.Body);
 | 
			
		||||
            return this.InternalToSql<TReturn>(select?.Body, fieldAlias);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>.LeftJoin(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, bool>> exp)
 | 
			
		||||
 
 | 
			
		||||
@@ -263,11 +263,11 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
            return this.InternalToDataTable(select?.Body);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string ToSql<TReturn>(Expression<Func<T1, TReturn>> select)
 | 
			
		||||
        public string ToSql<TReturn>(Expression<Func<T1, TReturn>> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex)
 | 
			
		||||
        {
 | 
			
		||||
            if (select == null) return this.InternalToSql<TReturn>(select?.Body);
 | 
			
		||||
            if (select == null) return this.InternalToSql<TReturn>(select?.Body, fieldAlias);
 | 
			
		||||
            _tables[0].Parameter = select.Parameters[0];
 | 
			
		||||
            return this.InternalToSql<TReturn>(select?.Body);
 | 
			
		||||
            return this.InternalToSql<TReturn>(select?.Body, fieldAlias);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public TReturn ToAggregate<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, TReturn>> select)
 | 
			
		||||
 
 | 
			
		||||
@@ -98,11 +98,11 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
            return this.InternalToDataTable(select?.Body);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        string ISelect<T1, T2>.ToSql<TReturn>(Expression<Func<T1, T2, TReturn>> select)
 | 
			
		||||
        string ISelect<T1, T2>.ToSql<TReturn>(Expression<Func<T1, T2, TReturn>> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex)
 | 
			
		||||
        {
 | 
			
		||||
            if (select == null) return this.InternalToSql<TReturn>(select?.Body);
 | 
			
		||||
            if (select == null) return this.InternalToSql<TReturn>(select?.Body, fieldAlias);
 | 
			
		||||
            for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
 | 
			
		||||
            return this.InternalToSql<TReturn>(select?.Body);
 | 
			
		||||
            return this.InternalToSql<TReturn>(select?.Body, fieldAlias);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        ISelect<T1, T2> ISelect<T1, T2>.LeftJoin(Expression<Func<T1, T2, bool>> exp)
 | 
			
		||||
 
 | 
			
		||||
@@ -101,11 +101,11 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
            return this.InternalToDataTable(select?.Body);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        string ISelect<T1, T2, T3>.ToSql<TReturn>(Expression<Func<T1, T2, T3, TReturn>> select)
 | 
			
		||||
        string ISelect<T1, T2, T3>.ToSql<TReturn>(Expression<Func<T1, T2, T3, TReturn>> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex)
 | 
			
		||||
        {
 | 
			
		||||
            if (select == null) return this.InternalToSql<TReturn>(select?.Body);
 | 
			
		||||
            if (select == null) return this.InternalToSql<TReturn>(select?.Body, fieldAlias);
 | 
			
		||||
            for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
 | 
			
		||||
            return this.InternalToSql<TReturn>(select?.Body);
 | 
			
		||||
            return this.InternalToSql<TReturn>(select?.Body, fieldAlias);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        ISelect<T1, T2, T3> ISelect<T1, T2, T3>.LeftJoin(Expression<Func<T1, T2, T3, bool>> exp)
 | 
			
		||||
 
 | 
			
		||||
@@ -104,11 +104,11 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
            return this.InternalToDataTable(select?.Body);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        string ISelect<T1, T2, T3, T4>.ToSql<TReturn>(Expression<Func<T1, T2, T3, T4, TReturn>> select)
 | 
			
		||||
        string ISelect<T1, T2, T3, T4>.ToSql<TReturn>(Expression<Func<T1, T2, T3, T4, TReturn>> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex)
 | 
			
		||||
        {
 | 
			
		||||
            if (select == null) return this.InternalToSql<TReturn>(select?.Body);
 | 
			
		||||
            if (select == null) return this.InternalToSql<TReturn>(select?.Body, fieldAlias);
 | 
			
		||||
            for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
 | 
			
		||||
            return this.InternalToSql<TReturn>(select?.Body);
 | 
			
		||||
            return this.InternalToSql<TReturn>(select?.Body, fieldAlias);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        ISelect<T1, T2, T3, T4> ISelect<T1, T2, T3, T4>.LeftJoin(Expression<Func<T1, T2, T3, T4, bool>> exp)
 | 
			
		||||
 
 | 
			
		||||
@@ -107,11 +107,11 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
            return this.InternalToDataTable(select?.Body);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        string ISelect<T1, T2, T3, T4, T5>.ToSql<TReturn>(Expression<Func<T1, T2, T3, T4, T5, TReturn>> select)
 | 
			
		||||
        string ISelect<T1, T2, T3, T4, T5>.ToSql<TReturn>(Expression<Func<T1, T2, T3, T4, T5, TReturn>> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex)
 | 
			
		||||
        {
 | 
			
		||||
            if (select == null) return this.InternalToSql<TReturn>(select?.Body);
 | 
			
		||||
            if (select == null) return this.InternalToSql<TReturn>(select?.Body, fieldAlias);
 | 
			
		||||
            for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
 | 
			
		||||
            return this.InternalToSql<TReturn>(select?.Body);
 | 
			
		||||
            return this.InternalToSql<TReturn>(select?.Body, fieldAlias);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        ISelect<T1, T2, T3, T4, T5> ISelect<T1, T2, T3, T4, T5>.LeftJoin(Expression<Func<T1, T2, T3, T4, T5, bool>> exp)
 | 
			
		||||
 
 | 
			
		||||
@@ -110,11 +110,11 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
            return this.InternalToDataTable(select?.Body);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        string ISelect<T1, T2, T3, T4, T5, T6>.ToSql<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, TReturn>> select)
 | 
			
		||||
        string ISelect<T1, T2, T3, T4, T5, T6>.ToSql<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, TReturn>> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex)
 | 
			
		||||
        {
 | 
			
		||||
            if (select == null) return this.InternalToSql<TReturn>(select?.Body);
 | 
			
		||||
            if (select == null) return this.InternalToSql<TReturn>(select?.Body, fieldAlias);
 | 
			
		||||
            for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
 | 
			
		||||
            return this.InternalToSql<TReturn>(select?.Body);
 | 
			
		||||
            return this.InternalToSql<TReturn>(select?.Body, fieldAlias);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        ISelect<T1, T2, T3, T4, T5, T6> ISelect<T1, T2, T3, T4, T5, T6>.LeftJoin(Expression<Func<T1, T2, T3, T4, T5, T6, bool>> exp)
 | 
			
		||||
 
 | 
			
		||||
@@ -113,11 +113,11 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
            return this.InternalToDataTable(select?.Body);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        string ISelect<T1, T2, T3, T4, T5, T6, T7>.ToSql<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TReturn>> select)
 | 
			
		||||
        string ISelect<T1, T2, T3, T4, T5, T6, T7>.ToSql<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TReturn>> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex)
 | 
			
		||||
        {
 | 
			
		||||
            if (select == null) return this.InternalToSql<TReturn>(select?.Body);
 | 
			
		||||
            if (select == null) return this.InternalToSql<TReturn>(select?.Body, fieldAlias);
 | 
			
		||||
            for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
 | 
			
		||||
            return this.InternalToSql<TReturn>(select?.Body);
 | 
			
		||||
            return this.InternalToSql<TReturn>(select?.Body, fieldAlias);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        ISelect<T1, T2, T3, T4, T5, T6, T7> ISelect<T1, T2, T3, T4, T5, T6, T7>.LeftJoin(Expression<Func<T1, T2, T3, T4, T5, T6, T7, bool>> exp)
 | 
			
		||||
 
 | 
			
		||||
@@ -117,11 +117,11 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
            return this.InternalToDataTable(select?.Body);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        string ISelect<T1, T2, T3, T4, T5, T6, T7, T8>.ToSql<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TReturn>> select)
 | 
			
		||||
        string ISelect<T1, T2, T3, T4, T5, T6, T7, T8>.ToSql<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TReturn>> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex)
 | 
			
		||||
        {
 | 
			
		||||
            if (select == null) return this.InternalToSql<TReturn>(select?.Body);
 | 
			
		||||
            if (select == null) return this.InternalToSql<TReturn>(select?.Body, fieldAlias);
 | 
			
		||||
            for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
 | 
			
		||||
            return this.InternalToSql<TReturn>(select?.Body);
 | 
			
		||||
            return this.InternalToSql<TReturn>(select?.Body, fieldAlias);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        ISelect<T1, T2, T3, T4, T5, T6, T7, T8> ISelect<T1, T2, T3, T4, T5, T6, T7, T8>.LeftJoin(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, bool>> exp)
 | 
			
		||||
 
 | 
			
		||||
@@ -117,11 +117,11 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
            for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
 | 
			
		||||
            return this.InternalToDataTable(select?.Body);
 | 
			
		||||
        }
 | 
			
		||||
        string ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>.ToSql<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TReturn>> select)
 | 
			
		||||
        string ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>.ToSql<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TReturn>> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex)
 | 
			
		||||
        {
 | 
			
		||||
            if (select == null) return this.InternalToSql<TReturn>(select?.Body);
 | 
			
		||||
            if (select == null) return this.InternalToSql<TReturn>(select?.Body, fieldAlias);
 | 
			
		||||
            for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
 | 
			
		||||
            return this.InternalToSql<TReturn>(select?.Body);
 | 
			
		||||
            return this.InternalToSql<TReturn>(select?.Body, fieldAlias);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>.LeftJoin(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, bool>> exp)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user