mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-09-17 00:45:35 +08:00
- 修复 FromQuery + WithTempQuery bug 和单元测试;
This commit is contained in:
@@ -2207,6 +2207,8 @@ namespace FreeSql.Internal
|
||||
{
|
||||
if (node.Expression == _oldexp)
|
||||
return Expression.Property(_newexp, node.Member.Name);
|
||||
if (node == _oldexp)
|
||||
return _newexp;
|
||||
return base.VisitMember(node);
|
||||
}
|
||||
}
|
||||
|
@@ -155,8 +155,11 @@ namespace FreeSql.Internal.CommonProvider
|
||||
public List<SelectTableInfo> _outsideTable = new List<SelectTableInfo>();
|
||||
public WithTempQueryParser(Select0Provider insideSelect, SelectGroupingProvider insideSelectGroup, Expression selector, SelectTableInfo outsideTable)
|
||||
{
|
||||
_insideSelectList.Add(new InsideInfo(insideSelect, insideSelectGroup, selector));
|
||||
_outsideTable.Add(outsideTable);
|
||||
if (selector != null)
|
||||
{
|
||||
_insideSelectList.Add(new InsideInfo(insideSelect, insideSelectGroup, selector));
|
||||
_outsideTable.Add(outsideTable);
|
||||
}
|
||||
}
|
||||
public class InsideInfo
|
||||
{
|
||||
@@ -223,7 +226,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
ParseExpMapResult = read;
|
||||
return $"{ParseExpMatchedTable.Alias}.{read.DbNestedField}";
|
||||
}
|
||||
for (var a = 0; a < members.Length; a++)
|
||||
for (var a = members[0] == ParseExpMatchedTable.Parameter ? 1 : 0; a < members.Length; a++)
|
||||
{
|
||||
read = read.Childs.Where(z => z.CsName == (members[a] as MemberExpression)?.Member.Name).FirstOrDefault();
|
||||
if (read == null) return null;
|
||||
|
@@ -141,6 +141,8 @@ namespace FreeSql.Internal.CommonProvider
|
||||
}
|
||||
else
|
||||
{
|
||||
if (retsp._diymemexpWithTempQuery == null)
|
||||
retsp._diymemexpWithTempQuery = new WithTempQueryParser(null, null, null, null).Append(select2, rettbs[1]);
|
||||
if (select2sp._tableRule != null && select2sp.IsDefaultSqlContent == true)
|
||||
{
|
||||
sql2 = select2sp._tableRule(select2sp._tables[0].Table.Type, null);
|
||||
|
@@ -66,8 +66,10 @@ namespace FreeSql.Internal.CommonProvider
|
||||
}
|
||||
if (tempQueryParser._outsideTable.Contains(curtable))
|
||||
{
|
||||
var replaceMember = firstMember.Type == curtable.Parameter.Type ? firstMember : members[0];
|
||||
var replaceVistor = new CommonExpression.ReplaceVisitor();
|
||||
for (var a = 0; a < members.Length; a++)
|
||||
members[a] = new CommonExpression.ReplaceVisitor().Modify(members[a], firstMember, curtable.Parameter);
|
||||
members[a] = replaceVistor.Modify(members[a], replaceMember, curtable.Parameter);
|
||||
var ret = _select._diymemexpWithTempQuery.ParseExp(members);
|
||||
ParseExpMapResult = _select._diymemexpWithTempQuery.ParseExpMapResult;
|
||||
return ret;
|
||||
|
Reference in New Issue
Block a user