예제 #1
0
        /// <summary>
        /// Parses a <paramref name="value"/> into an <see cref="IEdmExpression"/> value of the correct EDM type.
        /// </summary>
        /// <param name="edmType">The type of value.</param>
        /// <param name="value">The value to parse.</param>
        /// <returns>
        /// An IEdmExpression of type <paramref name="edmType" /> or null if the type is not supported/implemented.
        /// </returns>
        internal static IEdmExpression BuildEdmExpression(IEdmType edmType, string value)
        {
            EdmUtil.CheckArgumentNull(edmType, "edmType");
            EdmUtil.CheckArgumentNull(value, "value");

            EdmTypeKind termTypeKind = edmType.TypeKind;

            // Create expressions/constants for the corresponding types
            switch (termTypeKind)
            {
            case EdmTypeKind.Primitive:
                IEdmPrimitiveType primitiveTypeReference = (IEdmPrimitiveType)edmType;
                return(BuildEdmPrimitiveValueExp(primitiveTypeReference, value));

            case EdmTypeKind.TypeDefinition:
                IEdmTypeDefinition typeDefinitionReference = (IEdmTypeDefinition)edmType;
                return(BuildEdmPrimitiveValueExp(typeDefinitionReference.UnderlyingType(), value));

            case EdmTypeKind.Path:
                return(BuildEdmPathExp((IEdmPathType)edmType, value));

            case EdmTypeKind.Enum:
            case EdmTypeKind.Complex:
            case EdmTypeKind.Entity:
            case EdmTypeKind.Collection:
            case EdmTypeKind.EntityReference:
            case EdmTypeKind.Untyped:
            default:
                throw new NotSupportedException(Strings.EdmVocabularyAnnotations_TermTypeNotSupported(edmType.FullTypeName()));
            }
        }