//this class simplifies this: // timesheet.Entries.Any() == true //to this: // timesheet.Entries.Any() private Expression ProcessBinaryExpression(Expression exprToCompare, Expression exprToReturn, ExpressionType nodeType, Expression original) { BooleanConstantFinder visitor = new BooleanConstantFinder(); visitor.Visit(exprToCompare); if (visitor.Constant.HasValue) { switch (nodeType) { case ExpressionType.Equal: return(visitor.Constant.Value ? exprToReturn : Expression.Not(exprToReturn)); case ExpressionType.NotEqual: return(visitor.Constant.Value ? Expression.Not(exprToReturn) : exprToReturn); case ExpressionType.Or: case ExpressionType.OrElse: return(visitor.Constant.Value ? Expression.Constant(true) : exprToReturn); case ExpressionType.And: case ExpressionType.AndAlso: return(visitor.Constant.Value ? exprToReturn : Expression.Constant(false)); default: return(original); } } else { return(original); } }
//this class simplifies this: // timesheet.Entries.Any() == true //to this: // timesheet.Entries.Any() private Expression ProcessBinaryExpression(Expression exprToCompare, Expression exprToReturn, ExpressionType nodeType, Expression original) { BooleanConstantFinder visitor = new BooleanConstantFinder(); visitor.Visit(exprToCompare); if (visitor.Constant.HasValue) { switch (nodeType) { case ExpressionType.Equal: return visitor.Constant.Value ? exprToReturn : Expression.Not(exprToReturn); case ExpressionType.NotEqual: return visitor.Constant.Value ? Expression.Not(exprToReturn) : exprToReturn; case ExpressionType.Or: case ExpressionType.OrElse: return visitor.Constant.Value ? Expression.Constant(true) : exprToReturn; case ExpressionType.And: case ExpressionType.AndAlso: return visitor.Constant.Value ? exprToReturn : Expression.Constant(false); default: return original; } } else return original; }