/// <summary> /// Parse string or integer to enum value /// </summary> /// <param name="enumType">edm enum type</param> /// <param name="value">input string value</param> /// <param name="enumValue">output edm enum value</param> /// <returns>true if parse succeeds, false if fails</returns> private static bool TryParseEnum(IEdmEnumType enumType, string value, out ODataEnumValue enumValue) { long parsedValue; bool success = enumType.TryParseEnum(value, true, out parsedValue); enumValue = null; if (success) { enumValue = new ODataEnumValue(parsedValue.ToString(CultureInfo.InvariantCulture), enumType.FullTypeName()); } return(success); }
/// <summary> /// Parse string or integer to enum value /// </summary> /// <param name="enumType">edm enum type</param> /// <param name="value">input string value</param> /// <param name="enumValue">output edm enum value</param> /// <returns>true if parse succeeds, false if fails</returns> internal static bool TryParseEnum(IEdmEnumType enumType, string value, out ODataEnumValue enumValue) { long parsedValue; bool success = enumType.TryParseEnum(value, true, out parsedValue); enumValue = null; if (success) { // ODataEnumValue.Value will always be numeric string like '3', '10' instead of 'Cyan', 'Solid,Yellow', etc. // so user code can easily Enum.Parse() them into CLR value. enumValue = new ODataEnumValue(parsedValue.ToString(CultureInfo.InvariantCulture), enumType.FullTypeName()); } return(success); }
internal static bool TryBindIdentifier(string identifier, IEdmModel model, out QueryNode boundEnum) { boundEnum = null; string text = identifier; // parse the string, e.g., NS.Color'Green' // get type information, and also convert Green into an ODataEnumValue // find the first ', before that, it is namespace.type int indexOfSingleQuote = text.IndexOf('\''); if (indexOfSingleQuote < 0) { return(false); } string namespaceAndType = text.Substring(0, indexOfSingleQuote); // find the type from edm model IEdmEnumType enumType = UriEdmHelpers.FindEnumTypeFromModel(model, namespaceAndType); if (enumType == null) { return(false); } // now, find out the value UriPrimitiveTypeParser.TryRemovePrefix(namespaceAndType, ref text); UriPrimitiveTypeParser.TryRemoveQuotes(ref text); // parse string or int value to edm enum value string enumValueString = text; ODataEnumValue enumValue; enumType.TryParseEnum(enumValueString, out enumValue); if (enumValue == null) { return(false); } // create an enum node, enclosing an odata enum value EdmEnumTypeReference enumTypeReference = new EdmEnumTypeReference(enumType, false); boundEnum = new ConstantNode(enumValue, identifier, enumTypeReference); return(true); }
/// <summary> /// Parse string or integer to enum value /// </summary> /// <param name="enumType">edm enum type</param> /// <param name="value">input string value</param> /// <param name="enumValue">output edm enum value</param> /// <returns>true if parse succeeds, false if fails</returns> private static bool TryParseEnum(IEdmEnumType enumType, string value, out ODataEnumValue enumValue) { long parsedValue; bool success = enumType.TryParseEnum(value, true, out parsedValue); enumValue = null; if (success) { enumValue = new ODataEnumValue(parsedValue.ToString(CultureInfo.InvariantCulture), enumType.FullTypeName()); } return success; }
/// <summary> /// Parse string or integer to enum value /// </summary> /// <param name="enumType">edm enum type</param> /// <param name="value">input string value</param> /// <param name="enumValue">output edm enum value</param> /// <returns>true if parse succeeds, false if fails</returns> internal static bool TryParseEnum(IEdmEnumType enumType, string value, out ODataEnumValue enumValue) { long parsedValue; bool success = enumType.TryParseEnum(value, true, out parsedValue); enumValue = null; if (success) { // ODataEnumValue.Value will always be numeric string like '3', '10' instead of 'Cyan', 'Solid,Yellow', etc. // so user code can easily Enum.Parse() them into CLR value. enumValue = new ODataEnumValue(parsedValue.ToString(CultureInfo.InvariantCulture), enumType.ODataFullName()); } return success; }