Ejemplo n.º 1
0
 public SqlSingleAccessor(TypeAccessor accessor, ParameterExpression expression, MemberExpression expr)
     : base(accessor, expression, expr)
 {
 }
Ejemplo n.º 2
0
 public NullableDateTimeOffsetAccessor(TypeAccessor accessor, ParameterExpression expression, MemberExpression expr)
     : base(accessor, expression, expr)
 {
 }
Ejemplo n.º 3
0
 public NullableTimeSpanAccessor(TypeAccessor accessor, ParameterExpression expression, MemberExpression expr)
     : base(accessor, expression, expr)
 {
 }
Ejemplo n.º 4
0
 public GuidAccessor(TypeAccessor accessor, ParameterExpression expression, MemberExpression expr)
     : base(accessor, expression, expr)
 {
 }
Ejemplo n.º 5
0
 public NullableDecimalAccessor(TypeAccessor accessor, ParameterExpression expression, MemberExpression expr)
     : base(accessor, expression, expr)
 {
 }
Ejemplo n.º 6
0
        static public MemberAccessor GetMemberAccessor(TypeAccessor typeAccessor, string memberName)
        {
            var par  = Expression.Parameter(typeof(object), "obj");
            var expr = Expression.PropertyOrField(Expression.Convert(par, typeAccessor.Type), memberName);

            var type = expr.Type;

            var underlyingType = type;
            var isNullable     = false;

            if (underlyingType.IsGenericType && underlyingType.GetGenericTypeDefinition() == typeof(Nullable <>))
            {
                underlyingType = underlyingType.GetGenericArguments()[0];
                isNullable     = true;
            }

            if (underlyingType.IsEnum)
            {
                underlyingType = Enum.GetUnderlyingType(underlyingType);
            }

            if (isNullable)
            {
                switch (Type.GetTypeCode(underlyingType))
                {
                case TypeCode.Boolean: return(new NullableBooleanAccessor(typeAccessor, par, expr));

                case TypeCode.Char: return(new NullableCharAccessor(typeAccessor, par, expr));

                case TypeCode.SByte: return(new NullableSByteAccessor(typeAccessor, par, expr));

                case TypeCode.Byte: return(new NullableByteAccessor(typeAccessor, par, expr));

                case TypeCode.Int16: return(new NullableInt16Accessor(typeAccessor, par, expr));

                case TypeCode.UInt16: return(new NullableUInt16Accessor(typeAccessor, par, expr));

                case TypeCode.Int32: return(new NullableInt32Accessor(typeAccessor, par, expr));

                case TypeCode.UInt32: return(new NullableUInt32Accessor(typeAccessor, par, expr));

                case TypeCode.Int64: return(new NullableInt64Accessor(typeAccessor, par, expr));

                case TypeCode.UInt64: return(new NullableUInt64Accessor(typeAccessor, par, expr));

                case TypeCode.Single: return(new NullableSingleAccessor(typeAccessor, par, expr));

                case TypeCode.Double: return(new NullableDoubleAccessor(typeAccessor, par, expr));

                case TypeCode.Decimal: return(new NullableDecimalAccessor(typeAccessor, par, expr));

                case TypeCode.DateTime: return(new NullableDateTimeAccessor(typeAccessor, par, expr));

                case TypeCode.Object:
                    if (type == typeof(Guid))
                    {
                        return(new NullableGuidAccessor(typeAccessor, par, expr));
                    }
                    if (type == typeof(DateTimeOffset))
                    {
                        return(new NullableDateTimeOffsetAccessor(typeAccessor, par, expr));
                    }
                    if (type == typeof(TimeSpan))
                    {
                        return(new NullableTimeSpanAccessor(typeAccessor, par, expr));
                    }
                    break;

                default: break;
                }
            }
            else
            {
                switch (Type.GetTypeCode(underlyingType))
                {
                case TypeCode.Boolean: return(new BooleanAccessor(typeAccessor, par, expr));

                case TypeCode.Char: return(new CharAccessor(typeAccessor, par, expr));

                case TypeCode.SByte: return(new SByteAccessor(typeAccessor, par, expr));

                case TypeCode.Byte: return(new ByteAccessor(typeAccessor, par, expr));

                case TypeCode.Int16: return(new Int16Accessor(typeAccessor, par, expr));

                case TypeCode.UInt16: return(new UInt16Accessor(typeAccessor, par, expr));

                case TypeCode.Int32: return(new Int32Accessor(typeAccessor, par, expr));

                case TypeCode.UInt32: return(new UInt32Accessor(typeAccessor, par, expr));

                case TypeCode.Int64: return(new Int64Accessor(typeAccessor, par, expr));

                case TypeCode.UInt64: return(new UInt64Accessor(typeAccessor, par, expr));

                case TypeCode.Single: return(new SingleAccessor(typeAccessor, par, expr));

                case TypeCode.Double: return(new DoubleAccessor(typeAccessor, par, expr));

                case TypeCode.Decimal: return(new DecimalAccessor(typeAccessor, par, expr));

                case TypeCode.DateTime: return(new DateTimeAccessor(typeAccessor, par, expr));

                case TypeCode.Object:
                    if (type == typeof(Guid))
                    {
                        return(new GuidAccessor(typeAccessor, par, expr));
                    }
                    if (type == typeof(DateTimeOffset))
                    {
                        return(new DateTimeOffsetAccessor(typeAccessor, par, expr));
                    }
                    if (type == typeof(TimeSpan))
                    {
                        return(new TimeSpanAccessor(typeAccessor, par, expr));
                    }
                    break;

                default: break;
                }
            }

#if !SILVERLIGHT
            if (type == typeof(SqlByte))
            {
                return(new SqlByteAccessor(typeAccessor, par, expr));
            }
            if (type == typeof(SqlInt16))
            {
                return(new SqlInt16Accessor(typeAccessor, par, expr));
            }
            if (type == typeof(SqlInt32))
            {
                return(new SqlInt32Accessor(typeAccessor, par, expr));
            }
            if (type == typeof(SqlInt64))
            {
                return(new SqlInt64Accessor(typeAccessor, par, expr));
            }
            if (type == typeof(SqlSingle))
            {
                return(new SqlSingleAccessor(typeAccessor, par, expr));
            }
            if (type == typeof(SqlBoolean))
            {
                return(new SqlBooleanAccessor(typeAccessor, par, expr));
            }
            if (type == typeof(SqlDouble))
            {
                return(new SqlDoubleAccessor(typeAccessor, par, expr));
            }
            if (type == typeof(SqlDateTime))
            {
                return(new SqlDateTimeAccessor(typeAccessor, par, expr));
            }
            if (type == typeof(SqlDecimal))
            {
                return(new SqlDecimalAccessor(typeAccessor, par, expr));
            }
            if (type == typeof(SqlMoney))
            {
                return(new SqlMoneyAccessor(typeAccessor, par, expr));
            }
            if (type == typeof(SqlString))
            {
                return(new SqlStringAccessor(typeAccessor, par, expr));
            }
            if (type == typeof(SqlGuid))
            {
                return(new SqlGuidAccessor(typeAccessor, par, expr));
            }
#endif

            return((MemberAccessor)Activator.CreateInstance(
                       typeof(BaseAccessor <>).MakeGenericType(type),
                       new object[] { typeAccessor, par, expr }));
        }
Ejemplo n.º 7
0
 public NullableAccessor(TypeAccessor typeAccessor, ParameterExpression par, MemberExpression member)
     : base(typeAccessor, par, member)
 {
 }
Ejemplo n.º 8
0
 protected ExprMemberAccessor(TypeAccessor typeAccessor, MemberInfo memberInfo)
     : base(typeAccessor, memberInfo)
 {
 }
Ejemplo n.º 9
0
 public static T CreateInstanceEx <T>(InitContext context)
 {
     return(TypeAccessor <T> .CreateInstance(context));
 }
Ejemplo n.º 10
0
 public static T CreateInstanceEx <T>()
 {
     return(TypeAccessor <T> .CreateInstanceEx());
 }