C#实现DataTable映射成Model的方法(附源码)

C#实现DataTable映射成Model的方法

简介

在开发中,我们有时候会从数据库中获取DataTable对象,但是DataTable中的数据并不能直接用于操作,需要将DataTable映射成相应的Model对象,这里提供一种比较好用的方法。

实现过程

步骤如下:

  1. 定义Model类,具体模型字段需要与DataTable中的列名对应。

    csharp
    public class User
    {
    public int Id { get; set; }
    public string Name { get; set; }
    public DateTime Birthday { get; set; }
    }

  2. 编写映射方法,将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中对应的列值赋值给属性。

  3. 使用示例

```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
```

源码地址

完整的示例代码可以在以下链接中查看:

C#实现DataTable映射成Model的方法(附源码)

总结

以上就是将DataTable映射成Model的方法,该方法比较灵活,可以映射任意类型的Model集合。使用该方法可以减少代码量,提高开发效率。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#实现DataTable映射成Model的方法(附源码) - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • ASP.NET Core实现动态获取文件并下载

    在ASP.NET Core中,我们可以使用FileResult类来实现动态获取文件并下载。FileResult类是一个ActionResult,它表示一个文件的内容作为响应发送到客户端。在本攻略中,我们将介绍如何使用FileResult类来实现动态获取文件并下载,并提供两个示例说明。 实现步骤 以下是在ASP.NET Core中实现动态获取文件并下载的步骤:…

    C# 2023年5月16日
    00
  • asp.net+js实时奥运金牌榜代码第1/2页

    asp.net+js实时奥运金牌榜是一项基于ASP.NET和JavaScript技术的开发项目,可以实时监控奥运会金牌榜的变化并显示在网页上,该项目具有较高的实用性,适用于体育比赛等大型赛事开发。以下是该项目的详细攻略: 环境搭建 安装Visual Studio 安装IIS服务器 创建Web应用项目 技术实现 HTML HTML部分主要用于页面结构的搭建,使…

    C# 2023年5月31日
    00
  • C#下listview如何插入图片

    关于C#下listview如何插入图片,以下是详细攻略。 1. 添加图片列 首先我们需要在listview中添加一列,这一列用于存储图片。 listView1.Columns.Add("图片列", 80); 其中,”图片列”是列标题,80是列的宽度。为了方便,我们这里设置列宽为80。 2. 添加图片到列表项 接下来,我们需要添加图片到列表…

    C# 2023年6月6日
    00
  • C#实现CSV文件读写的示例详解

    C#实现CSV文件读写的示例详解 1. CSV文件概述 CSV是指逗号分隔符(Comma-Separated Values)文件,它是一种常见的纯文本格式,用于将简单的数据表格导出为电子表格应用程序支持的格式。在电子表格软件中,CSV通常仅用于导出和导入数据。 CSV文件用逗号分隔字段,每条记录占一行,每个字段的值之间用逗号隔开,有一些常见的规则:* 逗号是…

    C# 2023年5月15日
    00
  • jquery+ajax+C#实现无刷新操作数据库数据的简单实例

    下面我将为你详细讲解“jquery+ajax+C#实现无刷新操作数据库数据的简单实例”的完整攻略。 1. 准备工作 在开始前,你需要先准备好以下工作: 一台装有IIS、SQL Server等环境的Windows服务器。 一份C#项目,其中包含与数据库交互的代码。 一个HTML页面,用于调用Ajax和展示数据。 2. 实现步骤 2.1 配置Web.config…

    C# 2023年5月15日
    00
  • WPF如何绘制光滑连续贝塞尔曲线示例代码

    以下是关于如何在WPF中绘制光滑连续贝塞尔曲线的完整攻略。 1. 了解贝塞尔曲线 在开始绘制贝塞尔曲线之前,我们需要先了解贝塞尔曲线。贝塞尔曲线是由法国数学家Pierre Bézier所发明的数学曲线,通常用于二维或三维计算机图形中的路径和图形形状绘制。在WPF中,可以使用Path对象进行绘制。 贝塞尔曲线的基本元素是“控制点”,通过改变控制点可以构造不同形…

    C# 2023年6月6日
    00
  • C#实现简易计算器功能(1)(窗体应用)

    下面是“C#实现简易计算器功能(1)(窗体应用)”的完整攻略,包含两个实例说明。 标题 C#实现简易计算器功能(1)(窗体应用) 简介 本文将介绍如何使用C#语言实现简易计算器功能。在这个教程中,我们将学习如何创建一个窗体应用程序,并使用C#语言来实现基本的计算器功能。 步骤 步骤1. 创建新项目 首先,打开Visual Studio,并点击“创建新项目”选…

    C# 2023年6月6日
    00
  • C#实现字体旋转的方法

    下面就是C#实现字体旋转的完整攻略。 1. 绘制文字 首先,我们需要使用C#绘制文字。对于WinForm应用程序,我们可以在Paint事件中创建一个Graphics对象,然后使用DrawString方法绘制文字。例如: private void Form1_Paint(object sender, PaintEventArgs e) { // 创建Graph…

    C# 2023年6月7日
    00
合作推广
合作推广
分享本页
返回顶部