public override void Generate (ISqlCommandBuilder commandBuilder, ExpressionTreeVisitor textGeneratingExpressionVisitor, ISqlGenerationStage stage)
    {
      ArgumentUtility.CheckNotNull ("commandBuilder", commandBuilder);
      ArgumentUtility.CheckNotNull ("textGeneratingExpressionVisitor", textGeneratingExpressionVisitor);
      ArgumentUtility.CheckNotNull ("stage", stage);

      textGeneratingExpressionVisitor.VisitList (_expressions, textGeneratingExpressionVisitor.VisitExpression);
    }
    protected override Expression VisitChildren (ExpressionTreeVisitor visitor)
    {
      var newCases = visitor.VisitList (_cases, p => p.VisitChildren (visitor));
      var newElseCase = _elseCase != null ? visitor.VisitExpression (_elseCase) : null;

      return Update (newCases, newElseCase);
    }