Exemplo n.º 1
0
        /// <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));
        }
Exemplo n.º 2
0
            /// <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);
            }
Exemplo n.º 3
0
 /// <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])
 {
 }
Exemplo n.º 4
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;
 }
Exemplo n.º 5
0
 /// <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;
 }