public override DbExpression Visit(DbCaseExpression expression)
        {
            Check.NotNull(expression, "expression");

            DbExpression result = expression;

            var newWhens = VisitExpressionList(expression.When);
            var newThens = VisitExpressionList(expression.Then);
            var newElse  = VisitExpression(expression.Else);

            if (!ReferenceEquals(expression.When, newWhens)
                ||
                !ReferenceEquals(expression.Then, newThens)
                ||
                !ReferenceEquals(expression.Else, newElse))
            {
                result = CqtBuilder.Case(newWhens, newThens, newElse);
            }
            NotifyIfChanged(expression, result);
            return(result);
        }