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日

相关文章

  • iframe式ajax调用示例

    以下是“iframe式ajax调用示例”的完整攻略,包括什么是iframe式ajax调用、如何实现iframe式ajax调用以及两个示例。 什么是iframe式ajax调用? iframe式ajax调用是一种在网页中使用iframe元素来进行ajax请求的技术。通过使用iframe元素,我们可以在不刷新整个页面的情况下,向服务器发送ajax请求并获取响应结果…

    C# 2023年5月15日
    00
  • Winform ComboBox如何独立绘制下拉选项的字体颜色

    要实现Winform ComboBox独立绘制下拉选项的字体颜色,可以采用以下步骤: 1. 继承ComboBox并重写OnDrawItem方法 我们需要自定义一个ComboBox控件,继承原有的ComboBox并重写OnDrawItem方法。在这个方法中,我们可以为每个下拉选项单独设置字体颜色。 public class CustomComboBox : C…

    C# 2023年6月6日
    00
  • C#使用ThreadPriority设置线程优先级

    要使用C#中的ThreadPriority设置线程优先级,需要执行以下步骤: 1. 确定线程优先级 在C#中,线程优先级有以下几种: ThreadPriority.Lowest:最低优先级 ThreadPriority.BelowNormal:低于正常优先级 ThreadPriority.Normal:正常优先级 ThreadPriority.AboveNo…

    C# 2023年6月1日
    00
  • C#中IDispose接口的实现及为何这么实现详解

    下面是关于C#中IDisposable接口的实现及为何这么实现的详解,包含两个示例说明。 什么是IDisposable接口 在C#中,当需要使用一些非托管资源时(例如文件、数据库连接、Socket等等),程序需要手动释放这些资源,否则会造成占用资源过多,程序出现异常或运行缓慢等问题。为了实现资源的自动释放,C#定义了IDisposable接口。 IDispo…

    C# 2023年6月6日
    00
  • C++中#include头文件的示例详解

    下面是关于”C++中#include头文件的示例详解”的攻略: 什么是头文件? 在C++中,头文件是一种用于包含函数和变量定义的文件。这些文件通常包含函数和变量定义,使得在源代码中我们可以使用这些定义。通常情况下,头文件扩展名为.h。实际上,C++编译器不知道如何处理头文件,它只知道如何处理源代码文件,而头文件的作用就是将需要在源代码中用到的函数和变量定义放…

    C# 2023年6月6日
    00
  • C#将dll打包到程序中的具体实现

    将dll打包到C#程序中是一个常见的需求,主要有以下两种实现方式: 1. 通过嵌入资源的方式实现将dll打包到程序中 通过嵌入资源的方式可以将dll文件以二进制形式存储在程序中,然后在运行时将其提取出来,再进行使用。具体实现步骤如下: 步骤一:将dll文件添加到项目中 在Visual Studio中,右键点击项目,选择”添加”-“现有项”,然后选择要添加的d…

    C# 2023年5月15日
    00
  • C#利用服务器实现客户端之间通信

    C#利用服务器实现客户端之间通信 在C#中,我们可以使用 TCP、UDP 等协议,以及 socket 编程来实现客户端之间的通信。下面将详细介绍基于 TCP 协议的服务器和客户端之间的通信实现。 环境准备 在进行操作之前,需要准备以下环境: 安装 Visual Studio 开发工具 使用 C# 语言进行开发 服务器端代码 1. 引入命名空间 要使用 soc…

    C# 2023年6月7日
    00
  • C# 实现抓包的实例代码

    下面是详细的“C# 实现抓包的实例代码”的攻略。 一、背景介绍 在网络通讯过程中,我们需要获取通讯双方的数据,这个获取的过程就是网络抓包。在 C# 中,我们可以通过使用第三方库 SharpPcap 实现抓包。下面将会对使用 SharpPcap 进行网络抓包的实现过程进行详细讲解。 二、环境准备 在进行网络抓包之前,需要在计算机上安装 WinPcap。WinP…

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