Esempio n. 1
0
        public static void CurrentBindDynamicRow(
            this DbDataReader reader,
            List <DynamicColumn> columns,
            ref DynamicRow row)
        {
            if (null == reader)
            {
                return;
            }
            if (columns.IsNullOrEmpty())
            {
                return;
            }

            var dbValues = new object[columns.Count];

            reader.GetValues(dbValues);

            var flatValues  = new List <Any>();
            var values      = new List <Any>();
            var hashCodes   = new List <Any>();
            var dbNulls     = new List <string>();
            var columnIndex = -1;

            foreach (var column in columns)
            {
                columnIndex++;
                var value = dbValues[columnIndex];
                if (DBNull.Value == value)
                {
                    dbNulls.Add(column.BaseColumnName);
                    value = null;
                }
                flatValues.SafeAdd(column.ColumnName, value);
                flatValues.SafeAdd(column.BaseColumnName, value);
                values.Add(column.BaseColumnName, value);


                if (null != value)
                {
                    int hashCode = value.GetHashCode();
                    hashCodes.Add(
                        column.BaseColumnName, hashCode
                        );
                }
            }

            row.__ReturnAny             = true;
            row.__DatabaseFirst         = true;
            row.__DynamicColumns        = columns;
            row.__FlatValues            = flatValues;
            row.__DynamicValues         = values;
            row.__DynamicOriginalValues = values;
            row.__OriginalHashCodes     = hashCodes;
            row.__DynamicDbNulls        = dbNulls;
            row.__OriginalHashCode      = row.GetHashCode();

            if (dbNulls.Any())
            {
                foreach (var dbNull in dbNulls)
                {
                    hashCodes.Add(
                        dbNull,
                        row.__OriginalHashCode
                        );
                }
            }
            row.__OriginalHashCodes = hashCodes;
        }
Esempio n. 2
0
        public static List <dynamic> ToDynamics(
            this DbDataReader reader, int pageSize, int pageIndex)
        {
            var list = new List <dynamic>();

            if (null == reader)
            {
                return(list);
            }
            bool paging = pageSize > 0 && pageIndex > 0;
            int  index  = 0;

            var schema    = reader.GetSchemaTable();
            var tableName = schema.TableName;

            var columns = new List <string>();

            for (int i = 0; i < reader.FieldCount; i++)
            {
                string s = reader.GetName(i);
                columns.Add(s);
            }

            var dbValues = new object[reader.FieldCount];

            while (reader.Read())
            {
                index++;
                if (paging)
                {
                    if ((pageIndex - 1) * pageSize > index)
                    {
                        continue;
                    }
                    if (pageIndex * pageSize > index)
                    {
                        break;
                    }
                }

                reader.GetValues(dbValues);

                //var row = schema.NewRow();
                var values    = new List <Any>();
                var hashCodes = new List <Any>();
                var dbNulls   = new List <string>();

                var columnIndex = -1;
                foreach (var column in columns)
                {
                    columnIndex++;
                    var value = dbValues[columnIndex];
                    if (DBNull.Value == value)
                    {
                        dbNulls.Add(column);
                        value = null;
                    }
                    values.Add(column, value);

                    if (null != value)
                    {
                        int hashCode = value.GetHashCode();
                        hashCodes.Add(column, hashCode);
                    }
                }

                var data = new DynamicRow()
                {
                    __ReturnAny     = true,
                    __DatabaseFirst = true,
                    __TableName     = tableName,
                    __Values        = values,
                    __HashCodes     = hashCodes,
                    __DbNulls       = dbNulls,
                };
                data.__OriginalHashCode = data.GetHashCode();

                if (dbNulls.Any())
                {
                    foreach (var dbNull in dbNulls)
                    {
                        hashCodes.Add(
                            dbNull,
                            data.__OriginalHashCode
                            );
                    }
                }
                data.__HashCodes = hashCodes;

                list.Add(data as dynamic);
            }
            return(list);
        }