コード例 #1
0
        public Expression SubStringMethod(SubStringMethod method, LiteralExpression[] arguments)
        {
            if (arguments[0].LiteralType == LiteralType.Null)
            {
                return(arguments[0]);
            }
            else
            {
                int    startIndex;
                int    length;
                string result;

                if (!LiteralUtil.TryCoerceInt(arguments[1], out startIndex))
                {
                    throw new ODataException(String.Format(
                                                 ErrorMessages.Method_InvalidArgumentType,
                                                 method.MethodType, 2, "Edm.Int32"
                                                 ));
                }

                if (arguments.Length == 3)
                {
                    if (!LiteralUtil.TryCoerceInt(arguments[2], out length))
                    {
                        throw new ODataException(String.Format(
                                                     ErrorMessages.Method_InvalidArgumentType,
                                                     method.MethodType, 3, "Edm.Int32"
                                                     ));
                    }

                    result = LiteralUtil.CoerceString(arguments[0]).Substring(startIndex - 1, length);
                }
                else
                {
                    result = LiteralUtil.CoerceString(arguments[0]).Substring(startIndex - 1);
                }

                return(new LiteralExpression(result, LiteralType.String));
            }
        }