/// <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())); } }