mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 18:52:50 +08:00
- 修复 WithTempQuery + Column(Name 别名问题;
This commit is contained in:
parent
d3ff88b0b4
commit
0095130ccf
@ -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,10 +49,7 @@ namespace FreeSql.Internal
|
||||
if (_common.CodeFirst.IsSyncStructureToUpper) csname = csname.ToUpper();
|
||||
return csname;
|
||||
}
|
||||
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)
|
||||
{
|
||||
bool LocalEndsWithField(string dbField, string dbNestedField)
|
||||
internal bool EndsWithDbNestedField(string dbField, string dbNestedField)
|
||||
{
|
||||
switch (_ado.DataType)
|
||||
{
|
||||
@ -61,6 +59,9 @@ namespace FreeSql.Internal
|
||||
}
|
||||
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,
|
||||
BaseDiyMemberExpression diymemexp, List<GlobalFilter.Item> whereGlobalFilter, List<string> findIncludeMany, List<Expression> findSubSelectMany, bool isAllDtoMap)
|
||||
{
|
||||
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));
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
|
@ -19,6 +19,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
public CommonExpression _comonExp;
|
||||
public List<SelectTableInfo> _tables;
|
||||
public int _groupByLimit, _groupBySkip;
|
||||
public bool _addFieldAlias;
|
||||
|
||||
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;
|
||||
}
|
||||
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<GlobalFilter.Item>(_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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user