C#利用委托反射将DataTable转换为实体集
2013-03-13 18:02
375 查看
C#利用委托反射将DataTable转换为实体集
2012-04-19 来自:CNBLOGS 字体大小:【大 中 小】摘要:本文介绍C#利用委托反射将DataTable转换为实体集,并提供详细的示例代码供参考。
类泛型的约束:
public static class ToModel<T> where T : class, new()
定义委托:
public delegate void SetString(string value);
创建委托方法:
private static SetString CreateStringDelegate(T model, string propertyName)
{
MethodInfo mi = model.GetType().GetProperty(propertyName).GetSetMethod();
Type type = typeof(SetString);
return Delegate.CreateDelegate(type, model, mi) as SetString;
}
利用反射和委托将DataTable转换为实体集:
public static IList<T> GetDelegate_ToModelList(DataTable dt)
{
IList<T> list = new List<T>();
if (dt == null || dt.Rows.Count < 1) return list;
SetString setDelegateString;
foreach (DataRow dr in dt.Rows)
{
T model = new T();
foreach (DataColumn dc in dt.Columns)
{
setDelegateString = CreateStringDelegate(model, dc.ColumnName);
setDelegateString(dr[dc.ColumnName].ToString());
}
list.Add(model);
}
return list;
}
这样写问题就来了,因为委托定义的参数时string类型的,因为我们实体中可能有int或者DateTime类型的,这时就需要用上泛型委托了
如果这样定义委托:
public delegate void SetString<PT>(PT value)
创建委托方法(这里有问题,不知如何处理):
private static SetString CreateStringDelegate(T model, string propertyName)
{
MethodInfo mi = model.GetType().GetProperty(propertyName).GetSetMethod();
Type type = typeof(model).GetProperty(propertyName).PropertyType;
return Delegate.CreateDelegate(type, model, mi) as SetString<type>;
}
利用反射和委托将DataTable转换为实体集:
public static IList<T> GetDelegate_ToModelList(DataTable dt)
{
IList<T> list = new List<T>();
if (dt == null || dt.Rows.Count < 1) return list;
foreach (DataRow dr in dt.Rows)
{
T model = new T();
foreach (DataColumn dc in dt.Columns)
{
SetString<typeof(T).GetProperty(dc.ColumnName).PropertyType> setDelegateString = CreateStringDelegate(model, dc.ColumnName);
setDelegateString(dr[dc.ColumnName].ToString());
}
list.Add(model);
}
return list;
}
作者:cmsdn
相关文章推荐
- 利用委托反射将DataTable转换为实体集
- [转]利用.NET中的反射机制实现IList到DataTable的转换
- DataTable和DataRow利用反射直接转换为Model对象的扩展方法类
- 利用反射实现WSDL实体与自定义实体之间的转换
- C#利用反射+特性实现简单的实体映射数据库操作类
- [转]利用.NET中的反射机制实现IList到DataTable的转换
- C#利用反射+特性实现简单的实体映射数据库操作类
- C#中利用LINQ to XML与反射把任意类型的泛型集合转换成XML格式字符串的方法
- 利用反射将Datatable、SqlDataReader转换成List模型
- c#中DataTable与实体集合相互转换
- C#通过反射将DataRow转换成对应实体对象
- 使用反射机制实现实体列表到DataTable的深层字段转换
- 利用.NET中的反射机制实现IList到DataTable的转换
- C#利用反射给实体属性赋值
- 利用.NET中的反射机制实现IList到DataTable的转换
- 利用反射将Datatable、SqlDataReader转换成List模型
- c#利用反射+特性实现简单的实体映射数据库操作类实现自动增删改查(一)
- 利用反射将Datatable、SqlDataReader转换成List模型
- 利用.NET中的反射机制实现IList到DataTable的转换