/// <summary> /// Creates a row. /// </summary> /// <typeparam name="T"> /// The type of the unique identifier. /// </typeparam> /// <param name="fieldResolver"> /// The data Set. /// </param> /// <param name="uniqueId"> /// The unique identifier. /// </param> /// <param name="values"> /// The values. /// </param> /// <returns> /// The row. /// </returns> internal static Row Create <T>(IRowFieldResolver fieldResolver, T uniqueId, IEnumerable <KeyValuePair <string, object> > values) { if (typeof(T) == typeof(object) && uniqueId.GetType() != typeof(object)) { var parameters = new object[] { fieldResolver, uniqueId, values, }; return((Row)Row.RowCreateMethod.MakeGenericMethod(uniqueId.GetType()).Invoke(null, parameters)); } var rowValues = fieldResolver.GetIndices(values); object[] objects; if (rowValues.Count > 0) { objects = new object[rowValues[0].Item1 + 1]; foreach (var rowValue in rowValues) { objects[rowValue.Item1] = rowValue.Item2; } } else { objects = new object[0]; } return(new RowImplementation <T>(fieldResolver, uniqueId, objects)); }
/// <summary> /// Gets the id for a resolver. /// </summary> /// <param name="resolver"> /// The resolver. /// </param> /// <returns> /// The <see cref="int"/>. /// </returns> internal int GetResolverId(IRowFieldResolver resolver) { if (this.idsByResolver.TryGetValue(resolver, out int id)) { return(id); } id = ++this.currentId; this.idsByResolver[resolver] = id; this.resolversById[id] = resolver; return(id); }
/// <summary> /// Initializes a new instance of the <see cref="Row"/> class. /// </summary> /// <param name="resolver"> /// The resolver. /// </param> private Row(IRowFieldResolver resolver) : this(resolver, new object[0]) { }
/// <summary> /// Initializes a new instance of the <see cref="Row"/> class. /// </summary> /// <param name="resolver"> /// The resolver. /// </param> /// <param name="values"> /// The values. /// </param> private Row(IRowFieldResolver resolver, object[] values) { this.Resolver = resolver; this.values = values; }
/// <summary> /// Initializes a new instance of the <see cref="Row.RowImplementation{T}"/> class. /// </summary> /// <param name="resolver"> /// The field resolver. /// </param> /// <param name="id"> /// The unique id. /// </param> /// <param name="values"> /// The values. /// </param> internal RowImplementation(IRowFieldResolver resolver, T id, object[] values) : base(resolver, values) { this.Id = id; }