C#实现DataTable数据行列转换

1. 引言

DataTable是C#中常用的用于存储和操作数据的类,它类似于关系型数据库中的一张表,包含了行和列来组织数据。在实际应用中,有时我们需要将DataTable的行和列进行转换,以满足特定的需求,比如将行数据转换为列数据,或将列数据转换为行数据。本文将介绍如何使用C#实现DataTable的数据行列转换。

2. DataTable数据行列转换

2.1 数据行转换为列

有时候我们需要将DataTable的行数据转换为列数据,这可以通过使用LINQ查询语句来实现。

首先,我们可以先创建一个示例的DataTable对象:

DataTable dt = new DataTable();

dt.Columns.Add("Name", typeof(string));

dt.Columns.Add("Age", typeof(int));

dt.Columns.Add("Gender", typeof(string));

dt.Rows.Add("Tom", 25, "Male");

dt.Rows.Add("Alice", 30, "Female");

dt.Rows.Add("John", 40, "Male");

然后,我们可以使用LINQ查询语句将DataTable的行数据转换为列数据:

var query = from row in dt.AsEnumerable()

group row by row.Field<string>("Name") into g

select new

{

Name = g.Key,

Age = g.Select(r => r.Field<int>("Age")).ToList(),

Gender = g.Select(r => r.Field<string>("Gender")).ToList()

};

通过以上代码,我们将DataTable dt按照Name列的值进行分组,并将Age和Gender列的值分别存储到两个List中。

下面是输出转换结果的代码:

foreach (var item in query)

{

Console.WriteLine("Name: " + item.Name);

Console.WriteLine("Age: " + string.Join(", ", item.Age));

Console.WriteLine("Gender: " + string.Join(", ", item.Gender));

Console.WriteLine();

}

运行以上代码,输出的结果如下:

Name: Tom

Age: 25

Gender: Male

Name: Alice

Age: 30

Gender: Female

Name: John

Age: 40

Gender: Male

通过以上代码,我们成功地将DataTable的行数据转换为列数据。

2.2 数据列转换为行

同样地,我们有时候也需要将DataTable的列数据转换为行数据,这同样可以使用LINQ查询语句来实现。

首先,我们可以使用上一节创建的示例DataTable对象:

DataTable dt = new DataTable();

dt.Columns.Add("Name", typeof(string));

dt.Columns.Add("Age", typeof(int));

dt.Columns.Add("Gender", typeof(string));

dt.Rows.Add("Tom", 25, "Male");

dt.Rows.Add("Alice", 30, "Female");

dt.Rows.Add("John", 40, "Male");

然后,我们可以使用以下代码将DataTable的列数据转换为行数据:

var query = from DataColumn column in dt.Columns

select new

{

ColumnName = column.ColumnName,

Values = dt.AsEnumerable().Select(r => r[column]).ToList()

};

通过以上代码,我们将DataTable dt的列数据转换为一个匿名类型列表,每个元素包含列名(ColumnName)和该列的所有值(Values)。

下面是输出转换结果的代码:

foreach (var item in query)

{

Console.WriteLine("ColumnName: " + item.ColumnName);

Console.WriteLine("Values: " + string.Join(", ", item.Values));

Console.WriteLine();

}

运行以上代码,输出的结果如下:

ColumnName: Name

Values: Tom, Alice, John

ColumnName: Age

Values: 25, 30, 40

ColumnName: Gender

Values: Male, Female, Male

通过以上代码,我们成功地将DataTable的列数据转换为行数据。

3. 总结

本文介绍了如何使用C#实现DataTable数据行列转换的方法。通过使用LINQ查询语句,我们可以将DataTable的行数据转换为列数据或将列数据转换为行数据。这些转换操作可以帮助我们处理和分析DataTable中的数据,更好地满足特定的需求。

通过以上代码和示例,我们可以看出LINQ查询语句在数据转换中的便捷性和灵活性,可以根据具体需求进行各种复杂的数据转换操作。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签