mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-06-19 12:28:15 +08:00
- 优化 WithTempQuery + ToList 使用子查询;
This commit is contained in:
@ -955,12 +955,12 @@ namespace FreeSql.Internal
|
||||
return $"not({ExpressionLambdaToSql(notExp, tsc)})";
|
||||
case ExpressionType.Quote: return ExpressionLambdaToSql((exp as UnaryExpression)?.Operand, tsc);
|
||||
case ExpressionType.Lambda: return ExpressionLambdaToSql((exp as LambdaExpression)?.Body, tsc);
|
||||
//case ExpressionType.Invoke: return formatSql(Expression.Lambda(exp).Compile().DynamicInvoke(), tsc.mapType, tsc.mapColumnTmp, tsc.dbParams);
|
||||
case ExpressionType.Invoke:
|
||||
case ExpressionType.Invoke: //#1378
|
||||
var invokeExp = exp as InvocationExpression;
|
||||
var invokeReplaceVistor = new FreeSql.Internal.CommonExpression.ReplaceVisitor();
|
||||
var invokeReplaceExp = invokeExp.Expression;
|
||||
var invokeLambdaExp = invokeReplaceExp as LambdaExpression;
|
||||
var invokeLambdaExp = invokeReplaceExp as LambdaExpression;
|
||||
if (invokeLambdaExp == null) return formatSql(Expression.Lambda(exp).Compile().DynamicInvoke(), tsc.mapType, tsc.mapColumnTmp, tsc.dbParams);
|
||||
var invokeReplaceVistor = new FreeSql.Internal.CommonExpression.ReplaceVisitor();
|
||||
var len = Math.Min(invokeExp.Arguments.Count, invokeLambdaExp.Parameters.Count);
|
||||
for (var a = 0; a < len; a++)
|
||||
invokeReplaceExp = invokeReplaceVistor.Modify(invokeReplaceExp, invokeLambdaExp.Parameters[a], invokeExp.Arguments[a]);
|
||||
|
@ -493,6 +493,12 @@ namespace FreeSql.Internal.CommonProvider
|
||||
var tb = _select._tables.Find(a => a.Parameter == firstExp)?.Table;
|
||||
if (tb == null) return base.VisitMember(node);
|
||||
|
||||
if (tb.Columns.Any() == false && _select._diymemexpWithTempQuery != null) //匿名类,嵌套查询 DTO
|
||||
{
|
||||
Result.Add(NativeTuple.Create(node, default(ColumnInfo)));
|
||||
return node;
|
||||
}
|
||||
|
||||
while (exps.Any())
|
||||
{
|
||||
var memExp = exps.Pop() as MemberExpression;
|
||||
|
Reference in New Issue
Block a user