protected override Linq.Expression VisitBinary(Linq.BinaryExpression node) { if (node.NodeType == Linq.ExpressionType.ArrayIndex) { _ = new ArrayIndex(this.Current) { Array = this.VisitCacheParse(node.Left), Index = this.VisitCacheParse(node.Right), }; } else { Binary binary; if (node.IsReferenceComparison()) { if (node.NodeType == Linq.ExpressionType.Equal) { binary = new ReferenceEqual(this.Current); } else { binary = new ReferenceNotEqual(this.Current); } } else { binary = Binary.Create(this.Current, node.NodeType); if (node.Method is MethodInfo method) { binary.Method = this.VisitMethod(method); } if (node.Conversion is LambdaExpression lambda) { binary.Conversion = new Lambda(this.VisitCache(lambda)); } if (node.IsLiftedToNull) { binary.LiftToNull = true; } } binary.Left = this.VisitCacheParse(node.Left); binary.Right = this.VisitCacheParse(node.Right); } return(node); }