1、将DataTable类型转换为指定类型的List集合
/// <summary>
/// 将DataTable类型转换成List类型
/// </summary>
/// <typeparam name="T">需要转换List集合的实体类型</typeparam>
/// <param name="dt">转换为List集合的DataTable</param>
/// <returns>转换后的list集合</returns>
public static List<T> ConvertDataTableToList<T>(DataTable dt) where T : new()//泛型约束,用于可以实例化T对象
{
List<T> list = new List<T>();
Type type = typeof(T);
for (int i = 0; i < dt.Rows.Count; i++)
{
T t = new T();
PropertyInfo[] properties = type.GetProperties();
foreach (PropertyInfo item in properties)
{
if (item.CanWrite && dt.Columns.Contains(item.Name))
{
object value = dt.Rows[i][item.Name];
if (value != DBNull.Value) // 检查是否为空值
{
item.SetValue(t, value);
}
}
}
list.Add(t);
}
return list;
}
上述代码中:List<T>
<T>
是一个泛型参数,它在这个方法中表示一个占位符,可以接受任意类型作为参数。通过使用泛型参数,可以使方法在不同的类型上具有通用性和灵活性。
在这个方法中,<T>
告诉编译器我们希望在方法调用时指定一个具体的类型,以替代泛型参数 T
。这允许我们根据需要将不同的类型传递给这个方法,它们会被替换为 T
,将 DataTable
转换为指定类型的 List
。
例如,如果我们要将一个名为 Person
的自定义类转换为 DataTable
,我们可以这样调用方法:
DataTable dt = // 从数据库或其他地方获取DataTable
List<Person> list = ConvertDataTableToList<Person>(dt);
在这个例子中,<T>
被替换为 Person
,使方法能够将 DataTable
转换为包含 Person
对象的 List
。这样,我们可以在不同的场景下使用相同的转换方法,只需要根据需要传递不同的类型。
2、将DataTable类型转换为类实体模型
/// <summary>
/// 将单条数据转换成实体模型
/// </summary>
/// <typeparam name="T">需要转换的实体模型的类型</typeparam>
/// <param name="dt">转换为List集合的DataTable</param>
/// <returns>返回单条数据的实体模型</returns>
public static T ConvertDataToModel<T>(DataTable dt) where T : new()//泛型约束,用于可以实例化T对象
{
T t = new T();
Type type = typeof(T);
PropertyInfo[] property = type.GetProperties();
foreach (PropertyInfo item in property)
{
if (item.CanWrite && dt.Columns.Contains(item.Name))
{
if (dt.Rows[0][item.Name] != DBNull.Value) // 检查是否为空值
{
item.SetValue(t, dt.Rows[0][item.Name]);
}
}
}
return t;
}
上述代码用于将 DataTable
中的单条数据转换为特定实体类型的实体模型。与前面的方法类似,它使用泛型参数 <T>
表示一个占位符,可以接受任意类型作为参数。
这个方法的实现逻辑是遍历实体类型的属性,检查 DataTable
中是否包含相应的列,并将列的值赋给实体属性。
通过条件 if (dt.Rows[0][item.Name] != DBNull.Value)
来检查是否为空值,以避免将 null
赋给实体属性。这一步操作也可以避免在类型转换过程中出现DataTable中某字段数据为null而出现程序报错的情况。
使用示例:
DataTable dt = // 从数据库或其他地方获取DataTable
Person personEntity = ConvertDataToModel<Person >(dt);
Person 是你要转换的实体类型。这样,你就可以将 DataTable
中的单条数据转换为指定类型的实体模型。
至此,上述两种方法就可以实现将DataTable中的数据转换为指定实体类型的List集合或者指定的单类实体。