Skip to content

Commit

Permalink
Recursively visit when normalizing Any/All to Contains
Browse files Browse the repository at this point in the history
  • Loading branch information
roji committed Oct 25, 2024
1 parent 2e9e879 commit fe43369
Showing 1 changed file with 2 additions and 11 deletions.
13 changes: 2 additions & 11 deletions src/EFCore/Query/Internal/QueryOptimizingExpressionVisitor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -180,13 +180,13 @@ protected override Expression VisitMethodCall(MethodCallExpression methodCallExp
if ((methodInfo == EnumerableMethods.AnyWithPredicate || methodInfo == QueryableMethods.AnyWithPredicate) && !negated)
{
var containsMethod = containsMethodDefinition.MakeGenericMethod(methodCallExpression.Method.GetGenericArguments()[0]);
return Expression.Call(null, containsMethod, methodCallExpression.Arguments[0], itemExpression);
return Visit(Expression.Call(null, containsMethod, methodCallExpression.Arguments[0], itemExpression));
}

if ((methodInfo == EnumerableMethods.All || methodInfo == QueryableMethods.All) && negated)
{
var containsMethod = containsMethodDefinition.MakeGenericMethod(methodCallExpression.Method.GetGenericArguments()[0]);
return Expression.Not(Expression.Call(null, containsMethod, methodCallExpression.Arguments[0], itemExpression));
return Visit(Expression.Not(Expression.Call(null, containsMethod, methodCallExpression.Arguments[0], itemExpression)));
}
}
}
Expand Down Expand Up @@ -278,15 +278,6 @@ protected override Expression VisitNewArray(NewArrayExpression newArrayExpressio
return newArrayExpression.Update(expressions);
}

/// <summary>
/// This is an internal API that supports the Entity Framework Core infrastructure and not subject to
/// the same compatibility standards as public APIs. It may be changed or removed without notice in
/// any release. You should only use it directly in your code with extreme caution and knowing that
/// doing so can result in application failures when updating to a new Entity Framework Core release.
/// </summary>
protected override Expression VisitUnary(UnaryExpression unaryExpression)
=> unaryExpression.Update(Visit(unaryExpression.Operand));

private static Expression MatchExpressionType(Expression expression, Type typeToMatch)
=> expression.Type != typeToMatch
? Expression.Convert(expression, typeToMatch)
Expand Down

0 comments on commit fe43369

Please sign in to comment.