linq datatable group by 求和、取平均,并将结果转为datatable
时间: 2024-03-08 20:50:18 浏览: 152
您好!针对您的问题,可以使用LINQ语句对DataTable进行分组、求和、取平均并将结果转为DataTable。示例代码如下:
```csharp
// 原始DataTable
DataTable dt = new DataTable();
dt.Columns.Add("Category", typeof(string));
dt.Columns.Add("Amount", typeof(decimal));
dt.Rows.Add("A", 100);
dt.Rows.Add("B", 200);
dt.Rows.Add("A", 150);
dt.Rows.Add("B", 250);
// 使用LINQ对DataTable进行分组、求和、取平均并将结果转为DataTable
DataTable result = dt.AsEnumerable()
.GroupBy(row => row.Field<string>("Category"))
.Select(g => new
{
Category = g.Key,
SumAmount = g.Sum(row => row.Field<decimal>("Amount")),
AvgAmount = g.Average(row => row.Field<decimal>("Amount"))
})
.CopyToDataTable();
```
上述代码中,首先使用`AsEnumerable()`方法将DataTable转为`IEnumerable<DataRow>`类型,然后使用`GroupBy()`方法按照`Category`列进行分组。接着使用`Select()`方法将每个分组的结果转为一个新的匿名类型对象,其中包括`Category`列、分组的`Amount`列总和和平均值。最后使用`CopyToDataTable()`方法将结果转为DataTable类型。
注意,由于使用了匿名类型,需要将结果转为`DataTable`类型,因此必须使用`CopyToDataTable()`方法。如果需要将结果转为其他类型,可以使用`ToArray()`或`ToList()`方法等。
阅读全文