很简单的转换功能,这是我在GitHub上复制的一段代码(懒得再去找原地址了),感觉功能还算可以,贴出来分享给大家
/// <summary> /// DataTable to List converter generic class. /// Convert DataTable to a specific class List<>. /// The Class Property Name must be same as the Column Name of the DataTable. /// The mapping is directly upon "Class Property Name" and "Column Name of the DataTable". /// </summary> public static List<T> ConvertDataTableToList<T>(DataTable table) where T : class, new() { List<Tuple<DataColumn, PropertyInfo>> map = new List<Tuple<DataColumn, PropertyInfo>>(); foreach (PropertyInfo pi in typeof(T).GetProperties()) { //ColumnAttribute col = (ColumnAttribute) // Attribute.GetCustomAttribute(pi, typeof(ColumnAttribute)); //if (col == null) continue; if (table.Columns.Contains(pi.Name)) { map.Add(new Tuple<DataColumn, PropertyInfo>( table.Columns[pi.Name], pi)); } } List<T> list = new List<T>(table.Rows.Count); foreach (DataRow row in table.Rows) { if (row == null) { list.Add(null); continue; } T item = new T(); foreach (Tuple<DataColumn, PropertyInfo> pair in map) { object value = row[pair.Value1]; if (value is DBNull) value = null; pair.Value2.SetValue(item, value, null); } list.Add(item); } return list; }
sealed class Tuple<T1, T2> { public Tuple() { } public Tuple(T1 value1, T2 value2) { Value1 = value1; Value2 = value2; } public T1 Value1 { get; set; } public T2 Value2 { get; set; } }