zoukankan      html  css  js  c++  java
  • 将DataTable转换成类的方法

    /// <summary>

        /// 使用类的属性名对应DataTable中的字段名

        /// </summary>

        public static class TableToModel

        {

            /// <summary>

            /// DataRow扩展方法:将DataRow类型转化为指定类型的实体

            /// </summary>

            /// <typeparam name="T">实体类型</typeparam>

            /// <returns></returns>

            public static T ToModel<T>(this DataRow dr) where T : class, new()

            {

                return ToModel<T>(dr, true);

            }

            /// <summary>

            /// 将DataRow类型转化为指定类型的实体

            /// </summary>

            /// <typeparam name="T">实体类型</typeparam>

            /// <param name="dateTimeToString">是否需要将日期转换为字符串,默认为转换,值为true</param>

            /// <returns></returns>

            /// <summary>

            public static T ToModel<T>(this DataRow dr, bool dateTimeToString) where T : class, new()

            {

                if (dr != null)

                    return ToList<T>(dr.Table, dateTimeToString).First();

                return null;

            }

            /// <summary>

            /// 将DataTable类型转化为指定类型的实体集合

            /// </summary>

            /// <typeparam name="T">实体类型</typeparam>

            /// <returns></returns>

            public static List<T> ToList<T>(this DataTable dt) where T : class, new()

            {

                return ToList<T>(dt, true);

            }

            /// <summary>

            ///将DataTable类型转化为指定类型的实体集合

            /// </summary>

            /// <typeparam name="T">实体类型</typeparam>

            /// <param name="dateTimeToString">是否需要将日期转换为字符串,默认为转换,值为true</param>

            /// <returns></returns>

            public static List<T> ToList<T>(this DataTable dt, bool dateTimeToString) where T : class, new()

            {

                List<T> list = new List<T>();

                if (dt != null)

                {

                    List<PropertyInfo> infos = new List<PropertyInfo>();

                    Array.ForEach<PropertyInfo>(typeof(T).GetProperties(), p =>

                    {

                        if (dt.Columns.Contains(p.Name) == true)

                        {

                            infos.Add(p);

                        }

                    });

                    SetList<T>(list, infos, dt, dateTimeToString);

                }

                return list;

            }

            #region 私有方法

            private static void SetList<T>(List<T> list, List<PropertyInfo> infos, DataTable dt, bool dateTimeToString) where T : class, new()

            {

                foreach (DataRow dr in dt.Rows)

                {

                    T model = new T();

                    infos.ForEach(p =>

                    {

                        if (dr[p.Name] != DBNull.Value)

                        {

                            object tempValue = dr[p.Name];

                            if (dr[p.Name].GetType() == typeof(DateTime) && dateTimeToString == true)

                            {

                                tempValue = dr[p.Name].ToString();

                            }

                            try

                            {

                                p.SetValue(model, tempValue, null);

                            }

                            catch { }

                        }

                    });

                    list.Add(model);

                }

            }

            #endregion

    }

    /// <summary>

        /// 使用类的属性的Description属性对应DataTable中的字段名

        /// </summary>

        public static class TableToModel

        {

            /// <summary>

            /// 将DataRow类型转化为指定类型的实体

            /// </summary>

            /// <typeparam name="T">实体类型</typeparam>

            /// <returns></returns>

            public static T ToModel<T>(this DataRow dr) where T : class, new()

            {

                return ToModel<T>(dr, true);

            }

            /// <summary>

            /// 将DataRow类型转化为指定类型的实体

            /// </summary>

            /// <typeparam name="T">实体类型</typeparam>

            /// <param name="dateTimeToString">是否需要将日期转换为字符串,默认为转换,值为true</param>

            /// <returns></returns>

            /// <summary>

            public static T ToModel<T>(this DataRow dr, bool dateTimeToString) where T : class, new()

            {

                if (dr != null)

                    return ToList<T>(dr.Table, dateTimeToString).First();

                return null;

            }

            /// <summary>

            ///将DataTable类型转化为指定类型的实体集合

            /// </summary>

            /// <typeparam name="T">实体类型</typeparam>

            /// <returns></returns>

            public static List<T> ToList<T>(this DataTable dt) where T : class, new()

            {

                return ToList<T>(dt, true);

            }

            /// <summary>

            /// 将DataTable类型转化为指定类型的实体集合

            /// </summary>

            /// <typeparam name="T">实体类型</typeparam>

            /// <param name="dateTimeToString">是否需要将日期转换为字符串,默认为转换,值为true</param>

            /// <returns></returns>

            public static List<T> ToList<T>(this DataTable dt, bool dateTimeToString) where T : class, new()

            {

                List<T> list = new List<T>();

                if (dt != null)

                {

                    List<PropertyInfo> infos = new List<PropertyInfo>();

                    Array.ForEach<PropertyInfo>(typeof(T).GetProperties(), p =>

                    {

                        foreach (Attribute att in p.GetCustomAttributes(true))

                        {

                            System.ComponentModel.DescriptionAttribute dscript = att as System.ComponentModel.DescriptionAttribute;

                            if (dscript != null)

                            {

                                if (dt.Columns.Contains(dscript.Description) == true)

                                {

                                    infos.Add(p);

                                }

                            }

                        }

                    });

                    SetList<T>(list, infos, dt, dateTimeToString);

                }

                return list;

            }

            #region 私有方法

            private static void SetList<T>(List<T> list, List<PropertyInfo> infos, DataTable dt, bool dateTimeToString) where T : class, new()

            {

                foreach (DataRow dr in dt.Rows)

                {

                    T model = new T();

                    infos.ForEach(p =>

                    {

                        foreach (Attribute att in p.GetCustomAttributes(true))

                        {

                            System.ComponentModel.DescriptionAttribute dscript = att as System.ComponentModel.DescriptionAttribute;

                            if (dscript != null)

                            {

                                if (dr[dscript.Description] != DBNull.Value)

                                {

                                    object tempValue = dr[dscript.Description];

                                    if (dr[dscript.Description].GetType() == typeof(DateTime) && dateTimeToString == true)

                                    {

                                        tempValue = dr[p.Name].ToString();

                                    }

                                    try

                                    {

                                        p.SetValue(model, tempValue, null);

                                    }

                                    catch { }

                                }

                            }

                        }

                    });

                    list.Add(model);

                }

            }

            #endregion

        }

  • 相关阅读:
    HttpMessageNotWritableException: Could not write JSON: No serializer found for class ****
    处理【Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for operatio】
    java 日历类Calendar用法
    linux配置nginx
    linux 重命名文件和文件夹
    CentOS 6.7 配置 yum 安装 Nginx
    maven打包时跳过单元测试
    Eclipse 保存文件时自动格式化代码
    mybatis大于号,小于号,去地址符,单引号,双引号转义说明
    玩转Eclipse — 自动代码生成的Java Code Template
  • 原文地址:https://www.cnblogs.com/TNTZWC/p/1887299.html
Copyright © 2011-2022 走看看