C#实现利用泛型将DataSet转为Model的方法

下面是详细的讲解。

1. 确定需求

在实现将DataSet转为Model的方法前,需要先明确需求。本次需求是将DataSet中的数据转换为Model类型并返回。

2. 准备数据

假设我们有一个Student的类型,定义如下:

public class Student
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
}

当然,我们也可以使用其他类型来代替Student,只需稍作修改即可。

接下来,我们准备一个DataSet,其中包含若干Student类型的数据。

var dataSet = new DataSet();
var dataTable = new DataTable();
dataTable.Columns.Add("Id", typeof(int));
dataTable.Columns.Add("Name", typeof(string));
dataTable.Columns.Add("Age", typeof(int));

dataTable.Rows.Add(1, "Tom", 18);
dataTable.Rows.Add(2, "Peter", 20);
dataTable.Rows.Add(3, "Mary", 19);

dataSet.Tables.Add(dataTable);

3. 实现转换方法

首先,我们需要确定转换方法的参数和返回值,这里考虑使用泛型来实现:

public static List<T> DataSetToList<T>(DataSet dataSet) where T : new()
{
    // ...
}

接着,我们可以通过以下方式来将DataSet中的数据转换为Model类型:

public static List<T> DataSetToList<T>(DataSet dataSet) where T : new()
{
    List<T> list = new List<T>();

    foreach (DataRow row in dataSet.Tables[0].Rows)
    {
        T model = new T();

        foreach (DataColumn column in dataSet.Tables[0].Columns)
        {
            PropertyInfo propertyInfo = typeof(T).GetProperty(column.ColumnName);

            if (propertyInfo != null && row[column.ColumnName] != DBNull.Value)
            {
                propertyInfo.SetValue(model, row[column.ColumnName], null);
            }
        }

        list.Add(model);
    }

    return list;
}

该方法使用了两个循环,外部循环遍历DataTable中的每一行数据,内部循环遍历DataTable中的每一列,通过反射实现将数据转换为指定的Model类型。并将转换后的数据添加到List中并返回。

4. 示例说明

假如我们有一个Student类型的数据表,并且需要将这个数据表中的数据转换为Student类型,并返回一个List<Student>的对象,该如何操作呢?

public static void Main()
{
    var dataSet = new DataSet();
    var dataTable = new DataTable();
    dataTable.Columns.Add("Id", typeof(int));
    dataTable.Columns.Add("Name", typeof(string));
    dataTable.Columns.Add("Age", typeof(int));

    dataTable.Rows.Add(1, "Tom", 18);
    dataTable.Rows.Add(2, "Peter", 20);
    dataTable.Rows.Add(3, "Mary", 19);

    dataSet.Tables.Add(dataTable);

    List<Student> list = DataSetToList<Student>(dataSet);

    foreach (var student in list)
    {
        Console.WriteLine("Id: {0} Name: {1} Age: {2}", student.Id, student.Name, student.Age);
    }
}

运行结果如下:

Id: 1 Name: Tom Age: 18
Id: 2 Name: Peter Age: 20
Id: 3 Name: Mary Age: 19

因为我们在第3步的代码中将Model类型写死为了Student,所以该方法同样适用于其他类型的转换,只需将Student替换为其他类型即可。

另外,我们对该方法进行了泛型约束,规定了泛型类型必须要有一个无参构造函数,这样才能使用new()创建实例。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#实现利用泛型将DataSet转为Model的方法 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • C#通过反射创建自定义泛型

    要通过反射在C#中创建自定义泛型,需要遵循以下步骤: 使用Type.MakeGenericType方法创建泛型类型的实例对象,并传递一个类型数组,该数组包含泛型类型所需的类型参数。 使用Activator.CreateInstance方法创建泛型类型对象的实例。 必要时使用反射获取泛型类型对象上的属性和方法,以使其在程序中正确运行。 以下是两个示例说明: 示…

    C# 2023年5月31日
    00
  • .Net中的集合排序可以这么玩你知道吗

    当我们需要对一组数据进行排序时,集合排序是我们常用的手段之一。在 .Net 中,集合排序可以通过使用 Linq 的 OrderBy 和 OrderByDescending 方法来实现。 1. 升序排序 首先,我们需要定义一个包含一组数据的 List: List<int> numbers = new List<int> { 5, 3, …

    C# 2023年6月1日
    00
  • ASP.NET Core应用程序配置文件AppSetting.json

    ASP.NET Core应用程序配置文件AppSetting.json的完整攻略 在ASP.NET Core应用程序中,AppSetting.json是一个重要的配置文件,它包含应用程序的各种设置和选项。在本攻略中,我们将详细讲解如何使用AppSetting.json文件来配置ASP.NET Core应用程序,并提供两个示例说明。 步骤一:创建AppSett…

    C# 2023年5月17日
    00
  • MongoDB对Document(文档)的插入、删除及更新

    下面是MongoDB对Document的插入、删除及更新的完整攻略。 插入Document MongoDB插入Document的语法为: db.collection.insert(document) 其中,db.collection是指要插入Document的collection名称,document是一条Document。 在插入Document时,如果该…

    C# 2023年5月15日
    00
  • .NET MVC中ViewData,ViewBag和TempData的区别浅析

    视图数据传递的作用 在MVC框架的开发中,视图所需要的数据可以通过视图中的一个变量或对象来接收,因此需要将需要传递的数据先存储到某一个传递的变量中,在视图中再进行读取和使用。而ViewData、ViewBag和TempData这三个可选项都可以用来传递这些数据。 ViewData是一个字典类型的对象,可以用于在控制器和视图之间传递数据,所传递的数据只在请求期…

    C# 2023年5月31日
    00
  • Linq两个List集合取交集的实现

    为了实现两个List集合的交集,我们可以使用Linq中提供的Intersect方法。这个方法会返回两个集合中共有的元素,而且仅会返回一次(即不会有重复元素)。下面是具体的实现步骤: 1. 引入命名空间 首先要引入System.Linq这个命名空间,因为Linq是其中的一部分: using System.Linq; 2. 创建两个List集合 假设我们要比较的…

    C# 2023年6月1日
    00
  • C# 如何实现Token

    C# 实现 Token 的攻略可以分为以下几步: 1.定义 Token 模型:需要定义 Token 的相关信息,例如 Token 的值、生成时间、过期时间等。具体示例如下: public class TokenModel { public string Token { get; set; } public DateTime GenerateTime { ge…

    C# 2023年5月31日
    00
  • Jenkins安装的时区问题分析解决

    Jenkins安装的时区问题分析解决 Jenkins 是一种流行的持续集成和持续交付工具,它可以帮助开发人员自动化构建、测试和部署应用程序。在安装 Jenkins 时,可能会遇到时区问题,导致 Jenkins 显示的时间不正确。本攻略将介绍如何分析和解决 Jenkins 安装的时区问题。 问题分析 Jenkins 显示的时间不正确可能是由于以下原因导致的: …

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