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)); } }
/// <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<TResult>.</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]))); } }
/// <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<TResult>.</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<TResult>.</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>()); }
/// <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)); }
/// <summary> /// Initializes a new instance of the <see cref="DynamicRow"/> class. /// </summary> public DynamicRow() { _columns = new ColumnChecker(0); _values = new object[_columns.Count]; }
/// <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; }