将DataTable转换为通用列表?

将DataTable转换为通用列表?,第1张

将DataTable转换为通用列表?

那不会是实际的 泄漏 ,但可能会不必要地增加压力。

您要处理几行?请注意,反射是一种痛苦,并且对诸如此类的事情的每次调用

GetCustomAttributes
都可以返回一个新数组(因此,您希望这样做一次,而不是每行每属性一次)。

就我个人而言,我会预先构建我打算做的工作……如下所示。

请注意,如果要执行大量 *** 作,则可以切换到HyperDescriptor,或者如果可以选择.NET
3.5,则可以选择编译后的expression。由于

DataTable
不是强类型的,
HyperDescriptor
因此在以下各项之后(出于性能考虑)将是合理的下一步……

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;}}public static List<T> Convert<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(col.FieldName))        { map.Add(new Tuple<DataColumn,PropertyInfo>(     table.Columns[col.FieldName], 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;        }


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5113747.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-17
下一篇 2022-11-17

发表评论

登录后才能评论

评论列表(0条)

保存