• Conversion Between DataTable and List in C#


    1.List to DataTable

     public static DataTable ToDataTable<TSource>(this IList<TSource> data)
     {
         DataTable dataTable = new DataTable(typeof(TSource).Name);
         PropertyInfo[] props = typeof(TSource).GetProperties(BindingFlags.Public | BindingFlags.Instance);
         foreach (PropertyInfo prop in props)
         {
             dataTable.Columns.Add(prop.Name, Nullable.GetUnderlyingType(prop.PropertyType) ??
                 prop.PropertyType);
         }
    
         foreach (TSource item in data)
         {
             var values = new object[props.Length];
             for (int i = 0; i < props.Length; i++)
             {
                 values[i] = props[i].GetValue(item, null);
             }
             dataTable.Rows.Add(values);
         }
         return dataTable;
     }
    

    2.DataTable To List

    public static List<TSource> ToList<TSource>(this DataTable dataTable) where TSource : new()
    {
        var dataList = new List<TSource>();
    
        const BindingFlags flags = BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic;
        var objFieldNames = (from PropertyInfo aProp in typeof(TSource).GetProperties(flags)
                             select new
                             {
                                 Name = aProp.Name,
                                 Type = Nullable.GetUnderlyingType(aProp.PropertyType) ??
                     aProp.PropertyType
                             }).ToList();
        var dataTblFieldNames = (from DataColumn aHeader in dataTable.Columns
                                 select new
                                 {
                                     Name = aHeader.ColumnName,
                                     Type = aHeader.DataType
                                 }).ToList();
        var commonFields = objFieldNames.Intersect(dataTblFieldNames).ToList();
    
        foreach (DataRow dataRow in dataTable.AsEnumerable().ToList())
        {
            var aTSource = new TSource();
            foreach (var aField in commonFields)
            {
                PropertyInfo propertyInfos = aTSource.GetType().GetProperty(aField.Name);
                var value = (dataRow[aField.Name] == DBNull.Value) ?
                null : dataRow[aField.Name]; //if database field is nullable
                propertyInfos.SetValue(aTSource, value, null);
            }
            dataList.Add(aTSource);
        }
        return dataList;
    }
  • 相关阅读:
    详细的解说public,protected,Default和private的权限问题
    谈谈java中静态变量与静态方法在有继承关系的两个类中调用
    谈谈java中成员变量与成员方法继承的问题
    谈谈嵌套for循环的理解
    JAVA基础细谈
    Css的使用细谈
    Hibernate映射
    hibernate基本
    struts2
    s:form标签
  • 原文地址:https://www.cnblogs.com/dongshuangjie/p/5460285.html
Copyright © 2020-2023  润新知