mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-06-19 20:38:16 +08:00
- 修复 子查询内使用嵌套查询的 bug;
This commit is contained in:
@ -1083,13 +1083,6 @@ namespace FreeSql.Internal
|
||||
case "Min": return $"min({ExpressionLambdaToSql(exp3.Arguments[0], tsc)})";
|
||||
}
|
||||
}
|
||||
if (callType.FullName.StartsWith("FreeSql.ISelectGrouping`"))
|
||||
{
|
||||
switch (exp3.Method.Name)
|
||||
{
|
||||
case "ToList": return "";
|
||||
}
|
||||
}
|
||||
if (callType.FullName.StartsWith("FreeSql.ISelect`"))
|
||||
{ //子表查询
|
||||
switch (exp3.Method.Name)
|
||||
@ -2268,7 +2261,9 @@ namespace FreeSql.Internal
|
||||
public LambdaExpression Modify(LambdaExpression lambda, List<SelectTableInfo> tables)
|
||||
{
|
||||
this.tables = tables.Where(a => a.Type != SelectTableInfoType.Parent).ToList();
|
||||
parameters = this.tables.Select(a => a.Parameter ?? Expression.Parameter(a.Table.Type, a.Alias)).ToArray();
|
||||
parameters = this.tables.Select(a => a.Parameter ??
|
||||
Expression.Parameter(a.Table.Type,
|
||||
a.Alias.StartsWith("SP10") ? a.Alias.Replace("SP10", "ht") : a.Alias)).ToArray();
|
||||
var exp = Visit(lambda.Body);
|
||||
return Expression.Lambda(exp, parameters);
|
||||
}
|
||||
@ -2282,13 +2277,21 @@ namespace FreeSql.Internal
|
||||
if (parent.Expression?.NodeType == ExpressionType.Parameter &&
|
||||
parent.Expression.Type.Name.StartsWith("HzyTuple`") == true &&
|
||||
int.TryParse(parent.Member.Name.Replace("t", ""), out widx) && widx > 0 && widx <= tables.Count)
|
||||
{
|
||||
if (parameters[widx - 1].Type != parent.Type) //解决 BaseEntity + AsTable 时报错
|
||||
parameters[widx - 1] = Expression.Parameter(parent.Type, parameters[widx - 1].Name);
|
||||
return Expression.Property(parameters[widx - 1], node.Member.Name);
|
||||
}
|
||||
}
|
||||
|
||||
if (node.Expression?.NodeType == ExpressionType.Parameter &&
|
||||
node.Expression.Type.Name.StartsWith("HzyTuple`") == true &&
|
||||
int.TryParse(node.Member.Name.Replace("t", ""), out widx) && widx > 0 && widx <= tables.Count)
|
||||
{
|
||||
if (parameters[widx - 1].Type != node.Type) //解决 BaseEntity + AsTable 时报错
|
||||
parameters[widx - 1] = Expression.Parameter(node.Type, parameters[widx - 1].Name);
|
||||
return parameters[widx - 1];
|
||||
}
|
||||
|
||||
return base.VisitMember(node);
|
||||
}
|
||||
|
@ -93,23 +93,18 @@ namespace FreeSql.Internal.CommonProvider
|
||||
|
||||
if (lambParms == null)
|
||||
{
|
||||
var fromTables = from._tables.Where(a => a.Type == SelectTableInfoType.Parent).ToList();
|
||||
if (fromTables.Count > 0)
|
||||
{
|
||||
to._tables = new List<SelectTableInfo>(to._tables);
|
||||
to._tables.AddRange(fromTables);
|
||||
}
|
||||
var fromParentTables = from._tables.Where(a => a.Type == SelectTableInfoType.Parent).ToList();
|
||||
var fromTables = fromParentTables.Any() ? from._tables.Where(a => a.Type != SelectTableInfoType.Parent).ToList() : from._tables;
|
||||
if (to._tables.Count <= fromTables.Count)
|
||||
to._tables = new List<SelectTableInfo>(fromTables);
|
||||
else
|
||||
{
|
||||
if (to._tables.Count <= from._tables.Count)
|
||||
to._tables = new List<SelectTableInfo>(from._tables.ToArray());
|
||||
else
|
||||
{
|
||||
to._tables = new List<SelectTableInfo>(to._tables);
|
||||
for (var a = 0; a < from._tables.Count; a++)
|
||||
to._tables[a] = from._tables[a];
|
||||
}
|
||||
to._tables = new List<SelectTableInfo>(to._tables);
|
||||
for (var a = 0; a < fromTables.Count; a++)
|
||||
to._tables[a] = fromTables[a];
|
||||
}
|
||||
if (fromParentTables.Any())
|
||||
to._tables.AddRange(fromParentTables);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
Reference in New Issue
Block a user