datatable group by into
时间: 2023-08-27 18:05:09 浏览: 129
在 DataTable 中,可以使用 Group By 子句对数据进行分组操作。Group By 子句通常与集合函数(如 SUM、COUNT、AVG 等)一起使用,以便对每个组中的数据进行聚合。
下面是一个示例代码,它演示了如何在 DataTable 中使用 Group By 子句:
```csharp
// 假设有一个 DataTable 对象 dt,其中包含两个列:Name 和 Age
var query = from row in dt.AsEnumerable()
group row by row.Field<string>("Name") into g
select new
{
Name = g.Key,
Count = g.Count(),
AvgAge = g.Average(row => row.Field<int>("Age"))
};
```
在这个示例中,我们首先使用 `AsEnumerable()` 方法将 DataTable 转换为一个可枚举的序列。然后使用 `group by` 子句按照 `Name` 列对数据进行分组。分组后,我们使用 `select` 子句将每个分组的结果转换为一个新的匿名类型对象,该对象包含分组的键 `Name`,该组中的行数 `Count`,以及该组中所有行 `Age` 列的平均值 `AvgAge`。
需要注意的是,`group by` 子句可以按照多个列进行分组,例如:
```csharp
var query = from row in dt.AsEnumerable()
group row by new { Name = row.Field<string>("Name"), City = row.Field<string>("City") } into g
select new
{
Name = g.Key.Name,
City = g.Key.City,
Count = g.Count(),
AvgAge = g.Average(row => row.Field<int>("Age"))
};
```
在这个示例中,我们使用一个匿名类型作为分组的键,该类型包含 `Name` 和 `City` 两个属性。分组后,我们根据这两个属性将数据分成多个组,并计算每个组的行数和平均年龄。
阅读全文