gpt4 book ai didi

c# - 根据另一列中的值对数据表中的列求和

转载 作者:太空宇宙 更新时间:2023-11-03 18:12:14 26 4
gpt4 key购买 nike

我有一个数据库表,用作报告的来源。表格布局看起来
喜欢。表1是较大数据库表的子集。但是对于报告,我只需要某些列,所以我正在使用下面给出的函数创建一个新的数据表

Value  Description   Hours
1 A 2
2 B 3
3 C 5
1 A 3
2 B 4
2 B 3
3 C 3


private DataTable CreateFocusOfEffortData()
{
var dtChartData = new DataTable();
dtChartData.Columns.Add("Description", typeof(string));
dtChartData.Columns.Add("Hours", typeof(Double));
var myDataView = ReportData.DefaultView;
myDataView.RowFilter = "ActivityUnitID = " + _ActivityUnitID;
for (var i = 0; i < myDataView.ToTable().Rows.Count; i++)
{
var dataRow = new Object[dtChartData.Columns.Count];
dataRow[0] = ReportData.Rows[i]["Description"];
dataRow[1] = csaConvert.ToDouble(ReportData.Rows[i]["Hours"]);
dataRow[2] = ReportData.Rows[i]["Value"];
dtChartData.Rows.Add(dataRow);
}
return dtChartData;
}


现在,我需要使用上表中的摘要数据设计另一个报告。该表应
结合基于Column [“ Value]的所有列的数据。例如,在我的情况下,Value列1,2,3中有三个不同的值。结果表应将这三个值的总小时数相加。

    Value   Description  Hours
1 A 5
2 B 10
3 C 8


现在,我可以通过创建另一个存储的proc在sql中执行此操作,但我宁愿使用现有的数据表并编写C#函数来获取结果。有没有使用LINQ来实现此目的的简便方法?

最佳答案

您可以使用AsEnumerable()来使用LINQ,然后使用GroupByValue并在Description上进行Sum来设置第一行:

var result = dtChartData.AsEnumerable()
.GroupBy(row => new
{
Value = row.Field<int>("Value"),
Description = row.Field<string>("Description")
})
.Select(g =>
{
var row = g.First();
row.SetField("Hours", g.Sum(r => r.Field<double>("Hours")));

return row;
});


结果将返回 Hours,但是如果您想找回 IEnumerable<DataRow>,请使用:

var resultTable = result.CopyToDataTable();

关于c# - 根据另一列中的值对数据表中的列求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12552433/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com