C# 从获取的DataTable数据,实现横表转换为纵表
时间: 2024-09-26 14:13:29 浏览: 84
C#中DataTable实现行列转换的方法
在C#中,如果你有一个DataTable(表格数据模型)并且想要将它从横向数据结构(通常是行对应列的数据)转换成纵向数据结构(如一维数组或列表,其中每个元素是一组相关的值),可以使用`DataTable.AsEnumerable()`方法配合`Select()`或`GroupBy()`等LINQ查询来实现。以下是一个简单的例子:
```csharp
// 假设你有一个DataTable called dataTable
var dataTable = ...; // 通过某些方式填充数据
// 使用AsEnumerable()将DataTable转换为IEnumerable<DataRow>
var rows = dataTable.AsEnumerable();
// 1. 如果你想按照某个字段分组并取最大值,可以这样做(假设ColumnToTranspose是你想转置的列名)
var result = rows.GroupBy(row => row.Field<int>("ColumnToTranspose"))
.Select(group => group.Max(row => row.Field<double>("OtherColumnName")));
// 这样result就是一个新的IEnumerable<double>,每一项代表原Table中某列按指定列分组的最大值。
// 或者,如果你想保留所有相关行的信息(比如作为字典的键值对或列表的元组),可以这样:
List<(int ColumnToTranspose, double OtherValue)> listResult = new List<(int, double)>();
foreach (DataRow row in rows)
{
listResult.Add((row.Field<int>("ColumnToTranspose"), row.Field<double>("OtherColumnName")));
}
// 现在listResult就是每条记录按"ColumnToTranspose"排序的元组集合。
```
阅读全文