Esempio n. 1
0
            private static Expression GetPropertySetterExpr(Metadata.Column column, Expression resultExpr, Expression readerExpr)
            {
                var propertyExpression             = Expression.Property(resultExpr, column.Property);
                var readerGetValueByNameExpression = CreateReaderGetValueExpr(column, readerExpr);

                return(Expression.Assign(propertyExpression, readerGetValueByNameExpression));
            }
Esempio n. 2
0
            private static Expression CreateReaderGetValueExpr(Metadata.Column column, Expression readerExpr)
            {
                var propertyName    = Expression.Constant(column.Name);
                var ordinalCallExpr = Expression.Call(readerExpr, ReaderGetOrdinalMethod, propertyName);
                var getValueExpr    = Expression.Property(readerExpr, ReaderIndexByStringProperty, propertyName);

                // Return the first valid expression:
                // - Property is Enum,
                var propertyType = column.Property.PropertyType;

                return(EnumParseReaderValueExpression(column, getValueExpr)
                       ?? ReaderGetSpecificTypeExpression(propertyType, readerExpr, ordinalCallExpr)
                       ?? Expression.Convert(getValueExpr, propertyType));
            }
Esempio n. 3
0
            private static Expression EnumParseReaderValueExpression(Metadata.Column column, Expression getValueExpr)
            {
                if (column.IsEnum)
                {
                    // If DbEnumSaveType is Numeric, just cast
                    var propertyType = column.Property.PropertyType;
                    if (column.EnumSaveType == EnumSaveType.Numeric)
                    {
                        return(Expression.Convert(getValueExpr, propertyType));
                    }

                    // Otherwise, Call (EnumType)Enum.Parse(typeof(EnumType), reader[Name].ToString(), true)
                    return
                        (Expression.Convert(
                             Expression.Call(
                                 EnumParseMethod,
                                 Expression.Constant(propertyType),
                                 Expression.Call(getValueExpr, ToStringMethod),
                                 Expression.Constant(true)),
                             propertyType));
                }

                return(null);
            }
Esempio n. 4
0
            private static MethodCallExpression ColumnToParamExpression(Expression cmdExpr, Metadata.Column column, Expression objExpr)
            {
                Expression valueExpr;

                if (column.IsEnum && column.EnumSaveType == EnumSaveType.String)
                {
                    valueExpr = Expression.Call(Expression.Property(objExpr, column.Property), ToStringMethod);
                }
                else
                {
                    valueExpr = Expression.Property(objExpr, column.Property);
                }

                var parameterName = Expression.Constant("@" + column.Name);
                var valueAsObject = Expression.Convert(valueExpr, typeof(object));

                return(Expression.Call(SetCommandParameterValueMethod, cmdExpr, parameterName, valueAsObject));
            }