diff --git a/FreeSql/Internal/CommonExpression.cs b/FreeSql/Internal/CommonExpression.cs index 9154c696..073aa1a1 100644 --- a/FreeSql/Internal/CommonExpression.cs +++ b/FreeSql/Internal/CommonExpression.cs @@ -41,6 +41,7 @@ namespace FreeSql.Internal } internal const int ReadAnonymousFieldAsCsName = -53129; + internal const int ReadAnonymousFieldAsCsNameGroupBy = -10000; internal string GetFieldAsCsName(string csname) { csname = _common.QuoteSqlName(csname); @@ -48,19 +49,19 @@ namespace FreeSql.Internal if (_common.CodeFirst.IsSyncStructureToUpper) csname = csname.ToUpper(); 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 _tables, Func _tableRule, StringBuilder field, ReadAnonymousTypeInfo parent, ref int index, Expression exp, Select0Provider select, BaseDiyMemberExpression diymemexp, List whereGlobalFilter, List findIncludeMany, List 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) { if (localIndex >= 0) @@ -73,7 +74,7 @@ namespace FreeSql.Internal else if (string.IsNullOrEmpty(parent.CsName) == false) { 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)); } } @@ -264,7 +265,7 @@ namespace FreeSql.Internal else if (string.IsNullOrEmpty(parent.CsName) == false) { 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)); } } diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select0ProviderReader.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select0ProviderReader.cs index 97b3568c..97207fbc 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select0ProviderReader.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select0ProviderReader.cs @@ -815,7 +815,7 @@ namespace FreeSql.Internal.CommonProvider { var map = new ReadAnonymousTypeInfo(); 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 var sql = field.ToString(); diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/SelectGroupingProvider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/SelectGroupingProvider.cs index 6881b2e5..330503a3 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/SelectGroupingProvider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/SelectGroupingProvider.cs @@ -19,6 +19,7 @@ namespace FreeSql.Internal.CommonProvider public CommonExpression _comonExp; public List _tables; public int _groupByLimit, _groupBySkip; + public bool _addFieldAlias; public SelectGroupingProvider(IFreeSql orm, Select0Provider select, ReadAnonymousTypeInfo map, string field, CommonExpression comonExp, List tables) { @@ -50,6 +51,8 @@ namespace FreeSql.Internal.CommonProvider if (read == null) return null; } 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; case "Value": var curtables = _tables; @@ -240,7 +243,9 @@ namespace FreeSql.Internal.CommonProvider ret._whereGlobalFilter = new List(_select._whereGlobalFilter.ToArray()); ret._cancel = _select._cancel; 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]); + _addFieldAlias = false; var sql = $"\r\n{this.ToSql(parser._insideSelectList[0].InsideField)}"; ret.WithSql(sql); ret._diymemexpWithTempQuery = parser;