/// <summary> /// Identifies conditions to include from a <see cref="WhereLinqExpression"/>. /// </summary> /// <param name="node">The binary expression to analyze.</param> /// <returns>The original binary expression.</returns> protected override Expression VisitBinary(BinaryExpression node) { switch (node.NodeType) { case ExpressionType.AndAlso: case ExpressionType.OrElse: Visit(node.Left); Visit(node.Right); return(node); default: var types = ExpressionSearcher.GetTypes(node); if (types.Contains(ExpressionType.AndAlso) || types.Contains(ExpressionType.OrElse)) { Visit(node.Left); Visit(node.Right); return(node); } else { var visited = UnaryFixer.Fix(node); Conditions.Add(visited); return(node); } } }
protected override Expression VisitUnary(UnaryExpression node) { if (node.NodeType == ExpressionType.Not) { return(UnaryFixer.Fix(node)); } return(base.VisitUnary(node)); }