Remotion.Linq.SqlBackend.SqlPreparation.MethodCallTransformers.ConcatMethodCallTransformer.GetConcatenatedItems C# (CSharp) Method

GetConcatenatedItems() private method

private GetConcatenatedItems ( MethodCallExpression methodCallExpression ) : IEnumerable
methodCallExpression System.Linq.Expressions.MethodCallExpression
return IEnumerable
    private IEnumerable<Expression> GetConcatenatedItems (MethodCallExpression methodCallExpression)
    {
      if (methodCallExpression.Arguments.Count == 1
          && (typeof (IEnumerable).IsAssignableFrom (methodCallExpression.Arguments[0].Type)
              && methodCallExpression.Arguments[0].Type != typeof (string)))
      {
        ConstantExpression argumentAsConstantExpression;
        NewArrayExpression argumentAsNewArrayExpression;

        if ((argumentAsNewArrayExpression = methodCallExpression.Arguments[0] as NewArrayExpression) != null)
        {
          return argumentAsNewArrayExpression.Expressions;
        }
        else if ((argumentAsConstantExpression = methodCallExpression.Arguments[0] as ConstantExpression) != null)
        {
          return ((object[]) argumentAsConstantExpression.Value).Select (element => (Expression) Expression.Constant (element));
        }
        else
        {
          var message = string.Format (
              "The method call '{0}' is not supported. When the array overloads of String.Concat are used, only constant or new array expressions can "
              + "be translated to SQL; in this usage, the expression has type '{1}'.",
              FormattingExpressionTreeVisitor.Format (methodCallExpression),
              methodCallExpression.Arguments[0].GetType ());
          throw new NotSupportedException (message);
        }
      }
      else 
      {
        return methodCallExpression.Arguments;
      }
    }
  }
ConcatMethodCallTransformer