예제 #1
0
        /// <summary>
        /// Gets the clr value of the edm value based on its type.
        /// </summary>
        /// <param name="edmValue">The edm value.</param>
        /// <returns>The clr value</returns>
        internal static object ToClrValue(this IEdmPrimitiveValue edmValue)
        {
            Debug.Assert(edmValue != null, "edmValue != null");
            EdmPrimitiveTypeKind primitiveKind = edmValue.Type.PrimitiveKind();

            switch (edmValue.ValueKind)
            {
            case EdmValueKind.Binary:
                return(((IEdmBinaryValue)edmValue).Value);

            case EdmValueKind.Boolean:
                return(((IEdmBooleanValue)edmValue).Value);

            case EdmValueKind.DateTimeOffset:
                return(((IEdmDateTimeOffsetValue)edmValue).Value);

            case EdmValueKind.Decimal:
                return(((IEdmDecimalValue)edmValue).Value);

            case EdmValueKind.Guid:
                return(((IEdmGuidValue)edmValue).Value);

            case EdmValueKind.String:
                return(((IEdmStringValue)edmValue).Value);

            case EdmValueKind.Duration:
                return(((IEdmDurationValue)edmValue).Value);

            case EdmValueKind.Floating:
                return(ConvertFloatingValue((IEdmFloatingValue)edmValue, primitiveKind));

            case EdmValueKind.Integer:
                return(ConvertIntegerValue((IEdmIntegerValue)edmValue, primitiveKind));

            case EdmValueKind.Date:
                return(((IEdmDateValue)edmValue).Value);

            case EdmValueKind.TimeOfDay:
                return(((IEdmTimeOfDayValue)edmValue).Value);
            }

            throw new ODataException(ErrorStrings.EdmValueUtils_CannotConvertTypeToClrValue(edmValue.ValueKind));
        }