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));
        }