Ejemplo n.º 1
0
 public IEnumerable Deserialize(IDataReader reader, ColumnChecker columnReport)
 {
     while (reader.Read())
     {
         yield return(_compiledMap(reader, columnReport));
     }
 }
        /// <summary>
        /// Dumps all columns into an array for simple use cases.
        /// </summary>
        /// <param name="reader">The reader.</param>
        /// <param name="checker">The column checker.</param>
        /// <returns>dynamic.</returns>
        public IEnumerable Deserialize(DbDataReader reader, ColumnChecker checker)
        {
            var fieldCount = reader.FieldCount;

            checker = checker ?? new ColumnChecker(fieldCount);

            var needsFieldNames = fieldCount > checker.Count;

            while (reader.Read())
            {
                object[] values;
                if (needsFieldNames)
                {
                    var obj = new List <object>();
                    for (var i = 0; i < fieldCount; i++)
                    {
                        checker.HasColumn(reader, i);
                        obj.Add(reader.GetValue(i));
                    }

                    values = obj.ToArray();
                }
                else
                {
                    values = new object[fieldCount];
                    reader.GetValues(values);
                }

                yield return(new DynamicRow(checker, values));
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Deserializes into a KeyValuePair from a data reader.
        /// </summary>
        /// <param name="reader">The data reader.</param>
        /// <param name="checker">The column object.</param>
        /// <returns>IEnumerable&lt;TResult&gt;.</returns>
        public IEnumerable Deserialize(DbDataReader reader, ColumnChecker checker)
        {
            var keyAlias = "Key";
            IPropertyMapping keyMapping;
            var valueAlias = "Value";
            IPropertyMapping valueMapping;

            if (_props.TryGetValue("Key", out keyMapping))
            {
                keyAlias = keyMapping.ActiveAlias;
            }
            if (_props.TryGetValue("Value", out valueMapping))
            {
                valueAlias = valueMapping.ActiveAlias;
            }

            var resultType = DeserializationType;

            var genericTypeArguments = resultType.GetTypeInfo().GetGenericArguments();

            checker = checker ?? new ColumnChecker(reader.FieldCount);

            while (reader.Read())
            {
                yield return(Activator.CreateInstance(resultType,
                                                      Convert.ChangeType(reader.GetValue(checker.HasColumn(reader, keyAlias)), genericTypeArguments[0]),
                                                      Convert.ChangeType(reader.GetValue(checker.HasColumn(reader, valueAlias)), genericTypeArguments[1])));
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Initializes a new instance of the <see cref="DynamicRow" /> class.
        /// </summary>
        /// <param name="columns">The columns Susanoo has discovered and will map to properties.</param>
        /// <param name="values">The values.</param>
        /// <exception cref="System.IndexOutOfRangeException">
        /// Thrown if column count and value count do not match.
        /// </exception>
        public DynamicRow(ColumnChecker columns, object[] values)
        {
            if (columns.Count != values.Length)
            {
                throw new IndexOutOfRangeException();
            }

            _columns = columns;
            _values  = values;
        }
 /// <summary>
 /// Deserializes the specified reader.
 /// </summary>
 /// <typeparam name="TResult">The type of the t result.</typeparam>
 /// <param name="reader">The reader.</param>
 /// <param name="checker">The checker.</param>
 /// <returns>IEnumerable&lt;TResult&gt;.</returns>
 /// <exception cref="System.InvalidCastException">Value types cannot cast null.</exception>
 public IEnumerable <TResult> Deserialize <TResult>(IDataReader reader, ColumnChecker checker)
 {
     return(Deserialize(reader, checker).Cast <object>().Select(o =>
     {
         try
         {
             return (TResult)o;
         }
         catch (NullReferenceException ex)
         {
             // It is confusing to get a NullReference Exception due to casting,
             // so we rethrow as an invalid cast with more details.
             throw new InvalidCastException("Value types cannot cast null.", ex);
         }
     }));
 }
        /// <summary>
        /// Reads the first value only and casts to built in type.
        /// </summary>
        /// <param name="reader">The reader.</param>
        /// <param name="checker">The column checker.</param>
        /// <returns>IEnumerable&lt;TResult&gt;.</returns>
        public IEnumerable Deserialize(IDataReader reader, ColumnChecker checker)
        {
            var fieldCount = reader.FieldCount;

            if (fieldCount > 0)
            {
                while (reader.Read())
                {
                    var result = reader.GetValue(0); //Boxing is unavoidable :[

                    result = result == DBNull.Value ? null : result;

                    yield return(result);
                }
            }
        }
 /// <summary>
 /// Dumps all columns into an array for simple use cases.
 /// </summary>
 /// <typeparam name="TResult">The type of the result.</typeparam>
 /// <param name="reader">The reader.</param>
 /// <param name="checker">The column checker.</param>
 /// <returns>dynamic.</returns>
 public IEnumerable <TResult> Deserialize <TResult>(DbDataReader reader, ColumnChecker checker)
 {
     return(Deserialize(reader, checker).Cast <TResult>());
 }
Ejemplo n.º 8
0
 /// <summary>
 /// Deserializes the reader into a collection of objects.
 /// </summary>
 /// <param name="reader">The reader.</param>
 /// <param name="columnReport">The column report.</param>
 /// <returns>IEnumerable.</returns>
 public IEnumerable Deserialize(IDataReader reader, ColumnChecker columnReport)
 {
     return(_deserializer(reader, columnReport));
 }
Ejemplo n.º 9
0
 /// <summary>
 /// Initializes a new instance of the <see cref="DynamicRow"/> class.
 /// </summary>
 public DynamicRow()
 {
     _columns = new ColumnChecker(0);
     _values  = new object[_columns.Count];
 }
Ejemplo n.º 10
0
 /// <summary>
 /// Initializes a new instance of the <see cref="T:System.Dynamic.DynamicMetaObject" /> class.
 /// </summary>
 /// <param name="expression">
 /// The expression representing this <see cref="T:System.Dynamic.DynamicMetaObject" /> during the dynamic binding process.
 /// </param>
 /// <param name="restrictions">The set of binding restrictions under which the binding is valid.</param>
 /// <param name="value">The runtime value represented by the <see cref="T:System.Dynamic.DynamicMetaObject" />.</param>
 /// <param name="columns">The columns.</param>
 public DynamicRowMeta(Expression expression, BindingRestrictions restrictions, object value, ColumnChecker columns)
     : base(expression, restrictions, value)
 {
     _columns = columns;
 }