将IEnumerable转换为DataTable的原理是通过DataTable的Columns集合定义表结构,然后逐行将IEnumerable的元素添加到DataTable中。
使用DataTable的Columns和Rows属性,以及DataRow的ItemArray属性,逐行逐列地填充数据。
创建DataTable对象
DataTable类的构造函数创建一个空的数据表。定义表结构
Columns属性添加表的列,定义数据表的结构。遍历IEnumerable
foreach循环遍历IEnumerable,逐行添加数据。创建DataRow
IEnumerable的元素,创建一个DataRow对象。填充数据
IEnumerable的元素逐列填充到DataRow的ItemArray属性中。添加至DataTable
Rows属性将每个DataRow对象添加至DataTable。using System;
using System.Collections.Generic;
using System.Data;
class Program
{
static void Main()
{
// 示例数据
IEnumerable<Person> persons = GetSampleData();
// 步骤 1: 创建DataTable对象
DataTable dataTable = new DataTable("PersonTable");
// 步骤 2: 定义表结构
dataTable.Columns.Add("Id", typeof(int));
dataTable.Columns.Add("Name", typeof(string));
dataTable.Columns.Add("Age", typeof(int));
// 步骤 3-6: 遍历IEnumerable、创建DataRow、填充数据、添加至DataTable
foreach (var person in persons)
{
DataRow row = dataTable.NewRow();
row["Id"] = person.Id;
row["Name"] = person.Name;
row["Age"] = person.Age;
dataTable.Rows.Add(row);
}
}
// 示例类
class Person
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
// 获取示例数据
static IEnumerable<Person> GetSampleData()
{
return new List<Person>
{
new Person { Id = 1, Name = "Alice", Age = 25 },
new Person { Id = 2, Name = "Bob", Age = 30 },
new Person { Id = 3, Name = "Charlie", Age = 22 }
};
}
}
列名匹配
DataTable的列名与IEnumerable元素的属性名一致,以便正确填充数据。数据类型匹配
DataTable的列的数据类型与IEnumerable元素的属性的数据类型一致,以防数据转换错误。性能考虑
SqlBulkCopy等更高效的方式处理数据导入。将IEnumerable转换为DataTable是在C#中常见的操作,有助于将内存中的数据集合以DataTable的形式传递给数据库或其他组件。通过了解原理、方法和步骤,并参考实例源代码,开发者能够更灵活地处理这一数据转换操作。