protected override Expression VisitMethodCall(MethodCallExpression node) { IReadOnlyList <Expression> arguments; if (node.Method.Name == nameof(Enumerable.Select)) { arguments = new Expression[] { base.Visit(node.Arguments[0]), node.Arguments[1] } } ; else { arguments = base.Visit(node.Arguments); } Expression expression = base.Visit(node.Object); if (expression == node.Object && arguments == node.Arguments) { return(node); } MethodInfo closeMethod = OeMethodInfoHelper.MakeGenericMethod(node.Method, arguments); return(Expression.Call(node.Object, closeMethod, arguments)); }