mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 10:42:52 +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 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,10 +49,7 @@ namespace FreeSql.Internal
|
|||||||
if (_common.CodeFirst.IsSyncStructureToUpper) csname = csname.ToUpper();
|
if (_common.CodeFirst.IsSyncStructureToUpper) csname = csname.ToUpper();
|
||||||
return csname;
|
return csname;
|
||||||
}
|
}
|
||||||
public bool ReadAnonymousField(List<SelectTableInfo> _tables, Func<Type, string, string> _tableRule, StringBuilder field, ReadAnonymousTypeInfo parent, ref int index, Expression exp, Select0Provider select,
|
internal bool EndsWithDbNestedField(string dbField, string dbNestedField)
|
||||||
BaseDiyMemberExpression diymemexp, List<GlobalFilter.Item> whereGlobalFilter, List<string> findIncludeMany, List<Expression> findSubSelectMany, bool isAllDtoMap)
|
|
||||||
{
|
|
||||||
bool LocalEndsWithField(string dbField, string dbNestedField)
|
|
||||||
{
|
{
|
||||||
switch (_ado.DataType)
|
switch (_ado.DataType)
|
||||||
{
|
{
|
||||||
@ -61,6 +59,9 @@ namespace FreeSql.Internal
|
|||||||
}
|
}
|
||||||
return dbField.EndsWith(dbNestedField);
|
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)
|
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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user