0%

 将DataTable转换为List,将List转换为DataTable的实现类

复制代码

public static class DataTableHelper
{ public static DataTable ConvertTo<T>(IList<T> list)
    {
        DataTable table \= CreateTable<T>();
        Type entityType \= typeof(T);
        PropertyDescriptorCollection properties \= TypeDescriptor.GetProperties(entityType); foreach (T item in list)
        {
            DataRow row \= table.NewRow(); foreach (PropertyDescriptor prop in properties)
                row\[prop.Name\] \= prop.GetValue(item);
            table.Rows.Add(row);
        } return table;
    } public static IList<T> ConvertTo<T>(IList<DataRow> rows)
    {
        IList<T> list = null; if (rows != null)
        {
            list \= new List<T>(); foreach (DataRow row in rows)
            {
                T item \= CreateItem<T>(row);
                list.Add(item);
            }
        } return list;
    } public static IList<T> ConvertTo<T>(DataTable table)
    { if (table == null) return null;

        List<DataRow> rows = new List<DataRow>(); foreach (DataRow row in table.Rows)
            rows.Add(row); return ConvertTo<T>(rows);
    } //Convert DataRow into T Object
    public static T CreateItem<T>(DataRow row)
    { string columnName;
        T obj \= default(T); if (row != null)
        {
            obj \= Activator.CreateInstance<T>(); foreach (DataColumn column in row.Table.Columns)
            {
                columnName \= column.ColumnName; //Get property with same columnName
                PropertyInfo prop = obj.GetType().GetProperty(columnName); try { //Get value for the column
                    object value = (row\[columnName\].GetType() == typeof(DBNull)) ? null : row\[columnName\]; //Set property value
                    if (prop.CanWrite)    //判断其是否可写
                        prop.SetValue(obj, value, null);
                } catch { throw; //Catch whatever here

}
}
} return obj;
} public static DataTable CreateTable()
{
Type entityType = typeof(T);
DataTable table = new DataTable(entityType.Name);
PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(entityType); foreach (PropertyDescriptor prop in properties)
table.Columns.Add(prop.Name, prop.PropertyType); return table;
}
}

复制代码