mirror of
				https://github.com/nsnail/FreeSql.git
				synced 2025-11-04 17:20:49 +08:00 
			
		
		
		
	- 修复 WithTempQuery + Column(Name 别名问题;
This commit is contained in:
		@@ -41,6 +41,7 @@ namespace FreeSql.Internal
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        internal const int ReadAnonymousFieldAsCsName = -53129;
 | 
					        internal const int ReadAnonymousFieldAsCsName = -53129;
 | 
				
			||||||
 | 
					        internal const int ReadAnonymousFieldAsCsNameGroupBy = -10000;
 | 
				
			||||||
        internal string GetFieldAsCsName(string csname)
 | 
					        internal string GetFieldAsCsName(string csname)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            csname = _common.QuoteSqlName(csname);
 | 
					            csname = _common.QuoteSqlName(csname);
 | 
				
			||||||
@@ -48,19 +49,19 @@ namespace FreeSql.Internal
 | 
				
			|||||||
            if (_common.CodeFirst.IsSyncStructureToUpper) csname = csname.ToUpper();
 | 
					            if (_common.CodeFirst.IsSyncStructureToUpper) csname = csname.ToUpper();
 | 
				
			||||||
            return csname;
 | 
					            return csname;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        internal bool EndsWithDbNestedField(string dbField, string dbNestedField)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            switch (_ado.DataType)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                case DataType.SqlServer:
 | 
				
			||||||
 | 
					                case DataType.OdbcSqlServer:
 | 
				
			||||||
 | 
					                    return dbField.EndsWith(dbNestedField, StringComparison.CurrentCultureIgnoreCase);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return dbField.EndsWith(dbNestedField);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        public bool ReadAnonymousField(List<SelectTableInfo> _tables, Func<Type, string, string> _tableRule, StringBuilder field, ReadAnonymousTypeInfo parent, ref int index, Expression exp, Select0Provider select,
 | 
					        public bool ReadAnonymousField(List<SelectTableInfo> _tables, Func<Type, string, string> _tableRule, StringBuilder field, ReadAnonymousTypeInfo parent, ref int index, Expression exp, Select0Provider select,
 | 
				
			||||||
            BaseDiyMemberExpression diymemexp, List<GlobalFilter.Item> whereGlobalFilter, List<string> findIncludeMany, List<Expression> findSubSelectMany, bool isAllDtoMap)
 | 
					            BaseDiyMemberExpression diymemexp, List<GlobalFilter.Item> whereGlobalFilter, List<string> findIncludeMany, List<Expression> findSubSelectMany, bool isAllDtoMap)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            bool LocalEndsWithField(string dbField, string dbNestedField)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                switch (_ado.DataType)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    case DataType.SqlServer:
 | 
					 | 
				
			||||||
                    case DataType.OdbcSqlServer:
 | 
					 | 
				
			||||||
                        return dbField.EndsWith(dbNestedField, StringComparison.CurrentCultureIgnoreCase);
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                return dbField.EndsWith(dbNestedField);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            void LocalSetFieldAlias(ref int localIndex, bool isdiymemexp)
 | 
					            void LocalSetFieldAlias(ref int localIndex, bool isdiymemexp)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                if (localIndex >= 0)
 | 
					                if (localIndex >= 0)
 | 
				
			||||||
@@ -73,7 +74,7 @@ namespace FreeSql.Internal
 | 
				
			|||||||
                else if (string.IsNullOrEmpty(parent.CsName) == false)
 | 
					                else if (string.IsNullOrEmpty(parent.CsName) == false)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    parent.DbNestedField = GetFieldAsCsName(parent.CsName);
 | 
					                    parent.DbNestedField = GetFieldAsCsName(parent.CsName);
 | 
				
			||||||
                    if (localIndex == ReadAnonymousFieldAsCsName && LocalEndsWithField(parent.DbField, parent.DbNestedField) == false) //DbField 和 CsName 相同的时候,不处理
 | 
					                    if (localIndex == ReadAnonymousFieldAsCsName && EndsWithDbNestedField(parent.DbField, parent.DbNestedField) == false) //DbField 和 CsName 相同的时候,不处理
 | 
				
			||||||
                        field.Append(_common.FieldAsAlias(parent.DbNestedField));
 | 
					                        field.Append(_common.FieldAsAlias(parent.DbNestedField));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@@ -264,7 +265,7 @@ namespace FreeSql.Internal
 | 
				
			|||||||
                                else if (string.IsNullOrEmpty(parent.CsName) == false)
 | 
					                                else if (string.IsNullOrEmpty(parent.CsName) == false)
 | 
				
			||||||
                                {
 | 
					                                {
 | 
				
			||||||
                                    dbNestedField = GetFieldAsCsName(parent.CsName);
 | 
					                                    dbNestedField = GetFieldAsCsName(parent.CsName);
 | 
				
			||||||
                                    if (index == ReadAnonymousFieldAsCsName && LocalEndsWithField(diymemexp._field, dbNestedField) == false) //DbField 和 CsName 相同的时候,不处理
 | 
					                                    if (index == ReadAnonymousFieldAsCsName && EndsWithDbNestedField(diymemexp._field, dbNestedField) == false) //DbField 和 CsName 相同的时候,不处理
 | 
				
			||||||
                                        field.Append(_common.FieldAsAlias(dbNestedField));
 | 
					                                        field.Append(_common.FieldAsAlias(dbNestedField));
 | 
				
			||||||
                                }
 | 
					                                }
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -815,7 +815,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
            var map = new ReadAnonymousTypeInfo();
 | 
					            var map = new ReadAnonymousTypeInfo();
 | 
				
			||||||
            var field = new StringBuilder();
 | 
					            var field = new StringBuilder();
 | 
				
			||||||
            var index = -10000; //临时规则,不返回 as1
 | 
					            var index = CommonExpression.ReadAnonymousFieldAsCsNameGroupBy; //临时规则,不返回 as1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            _commonExpression.ReadAnonymousField(_tables, _tableRule, field, map, ref index, columns, null, _diymemexpWithTempQuery, _whereGlobalFilter, null, null, false); //不走 DTO 映射,不处理 IncludeMany
 | 
					            _commonExpression.ReadAnonymousField(_tables, _tableRule, field, map, ref index, columns, null, _diymemexpWithTempQuery, _whereGlobalFilter, null, null, false); //不走 DTO 映射,不处理 IncludeMany
 | 
				
			||||||
            var sql = field.ToString();
 | 
					            var sql = field.ToString();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,6 +19,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
				
			|||||||
        public CommonExpression _comonExp;
 | 
					        public CommonExpression _comonExp;
 | 
				
			||||||
        public List<SelectTableInfo> _tables;
 | 
					        public List<SelectTableInfo> _tables;
 | 
				
			||||||
        public int _groupByLimit, _groupBySkip;
 | 
					        public int _groupByLimit, _groupBySkip;
 | 
				
			||||||
 | 
					        public bool _addFieldAlias;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public SelectGroupingProvider(IFreeSql orm, Select0Provider select, ReadAnonymousTypeInfo map, string field, CommonExpression comonExp, List<SelectTableInfo> tables)
 | 
					        public SelectGroupingProvider(IFreeSql orm, Select0Provider select, ReadAnonymousTypeInfo map, string field, CommonExpression comonExp, List<SelectTableInfo> tables)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
@@ -50,6 +51,8 @@ namespace FreeSql.Internal.CommonProvider
 | 
				
			|||||||
                        if (read == null) return null;
 | 
					                        if (read == null) return null;
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    ParseExpMapResult = read;
 | 
					                    ParseExpMapResult = read;
 | 
				
			||||||
 | 
					                    if (!_addFieldAlias) return read.DbField;
 | 
				
			||||||
 | 
					                    if (_comonExp.EndsWithDbNestedField(read.DbField, read.DbNestedField) == false) return $"{read.DbField}{_comonExp._common.FieldAsAlias(read.DbNestedField)}";
 | 
				
			||||||
                    return read.DbField;
 | 
					                    return read.DbField;
 | 
				
			||||||
                case "Value":
 | 
					                case "Value":
 | 
				
			||||||
                    var curtables = _tables;
 | 
					                    var curtables = _tables;
 | 
				
			||||||
@@ -240,7 +243,9 @@ namespace FreeSql.Internal.CommonProvider
 | 
				
			|||||||
            ret._whereGlobalFilter = new List<GlobalFilter.Item>(_select._whereGlobalFilter.ToArray());
 | 
					            ret._whereGlobalFilter = new List<GlobalFilter.Item>(_select._whereGlobalFilter.ToArray());
 | 
				
			||||||
            ret._cancel = _select._cancel;
 | 
					            ret._cancel = _select._cancel;
 | 
				
			||||||
            if (ret._tables[0].Table == null) ret._tables[0].Table = TableInfo.GetDefaultTable(typeof(TDto));
 | 
					            if (ret._tables[0].Table == null) ret._tables[0].Table = TableInfo.GetDefaultTable(typeof(TDto));
 | 
				
			||||||
 | 
					            _addFieldAlias = true;
 | 
				
			||||||
            var parser = new Select0Provider.WithTempQueryParser(_select, this, selector, ret._tables[0]);
 | 
					            var parser = new Select0Provider.WithTempQueryParser(_select, this, selector, ret._tables[0]);
 | 
				
			||||||
 | 
					            _addFieldAlias = false;
 | 
				
			||||||
            var sql = $"\r\n{this.ToSql(parser._insideSelectList[0].InsideField)}";
 | 
					            var sql = $"\r\n{this.ToSql(parser._insideSelectList[0].InsideField)}";
 | 
				
			||||||
            ret.WithSql(sql);
 | 
					            ret.WithSql(sql);
 | 
				
			||||||
            ret._diymemexpWithTempQuery = parser;
 | 
					            ret._diymemexpWithTempQuery = parser;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user