Esempio n. 1
0
        /// <summary>
        /// 将DataTable转化成List对象
        /// </summary>
        /// <param name="dt"></param>
        /// <returns></returns>
        public static List <T> ConvertToList(DataTable dt)
        {
            List <T>                    list = new List <T>();
            DynamicBuilder <T>          builder;
            Dictionary <string, string> columns = new Dictionary <string, string>(StringComparer.InvariantCultureIgnoreCase);

#if CheckColumnExists
            for (int i = 0; i < dt.Columns.Count; i++)
            {
                string name = dt.Columns[i].ColumnName;
                if (!columns.ContainsKey(name))
                {
                    columns.Add(name, name);
                }
            }
#endif
            if (dictBuilderDt.ContainsKey(typeof(T)))
            {
                builder = dictBuilderDt[typeof(T)];
            }
            else
            {
                builder = DynamicBuilder <T> .CreateBuilder(dt.NewRow());

                dictBuilderDt.Add(typeof(T), builder);
            }

            foreach (DataRow dr in dt.Rows)
            {
                list.Add(builder.BuildT(dr, columns));
            }

            return(list);
        }
Esempio n. 2
0
        /// <summary>
        /// 把IDataReader转化为List对象列表
        /// </summary>
        /// <param name="reader"></param>
        /// <returns></returns>
        public static List <T> ConvertToList(IDataReader reader)
        {
            List <T>                    list = new List <T>();
            DynamicBuilder <T>          builder;
            Dictionary <string, string> columns = new Dictionary <string, string>(StringComparer.InvariantCultureIgnoreCase);

#if CheckColumnExists
            for (int i = 0; i < reader.FieldCount; i++)
            {
                string name = reader.GetName(i);
                if (!columns.ContainsKey(name))
                {
                    columns.Add(name, name);
                }
            }
#endif
            if (dictBuilder.ContainsKey(typeof(T)))
            {
                builder = dictBuilder[typeof(T)];
            }
            else
            {
                builder = DynamicBuilder <T> .CreateBuilder(reader);

                lock (dictBuilder)
                {
                    if (!dictBuilder.ContainsKey(typeof(T)))
                    {
                        dictBuilder.Add(typeof(T), builder);
                    }
                }
            }

            while (reader.Read())
            {
                list.Add(builder.Build(reader, columns));
            }

            return(list);
        }