C#实现DataTable映射成Model的方法
简介
在开发中,我们有时候会从数据库中获取DataTable对象,但是DataTable中的数据并不能直接用于操作,需要将DataTable映射成相应的Model对象,这里提供一种比较好用的方法。
实现过程
步骤如下:
-
定义Model类,具体模型字段需要与DataTable中的列名对应。
csharp
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime Birthday { get; set; }
} -
编写映射方法,将DataTable映射成Model集合。
csharp
public static List<T> MapToList<T>(this DataTable dt) where T : new()
{
var modelList = new List<T>();
foreach (DataRow row in dt.Rows)
{
var model = new T();
foreach (DataColumn column in dt.Columns)
{
PropertyInfo property = model.GetType().GetProperty(column.ColumnName, BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase);
if (property != null && row[column] != DBNull.Value)
property.SetValue(model, Convert.ChangeType(row[column], property.PropertyType), null);
}
modelList.Add(model);
}
return modelList;
}该方法使用了泛型,可以将DataTable映射成任意类型的Model集合。在映射的过程中,通过反射获取Model对象对应的属性,并将DataTable中对应的列值赋值给属性。
-
使用示例
```csharp
// 假设有以下的DataTable对象
var dt = new DataTable();
dt.Columns.Add(new DataColumn("Id", typeof(int)));
dt.Columns.Add(new DataColumn("Name", typeof(string)));
dt.Columns.Add(new DataColumn("Birthday", typeof(DateTime)));
dt.Rows.Add(new object[] {1, "张三", new DateTime(1990, 1, 1)});
dt.Rows.Add(new object[] {2, "李四", new DateTime(1990, 2, 1)});
// 将DataTable映射成User的List集合
var userList = dt.MapToList<User>();
// 遍历User的List集合
foreach(var user in userList)
{
Console.WriteLine($"Id:{user.Id}, Name:{user.Name}, Birthday:{user.Birthday}");
}
```
输出结果为:
```
Id:1, Name:张三, Birthday:1990/1/1 0:00:00
Id:2, Name:李四, Birthday:1990/2/1 0:00:00
```
源码地址
完整的示例代码可以在以下链接中查看:
总结
以上就是将DataTable映射成Model的方法,该方法比较灵活,可以映射任意类型的Model集合。使用该方法可以减少代码量,提高开发效率。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#实现DataTable映射成Model的方法(附源码) - Python技术站