在我的c#WinForm应用程序中,我有一个DataTable
跟踪水果的销售情况,它就像:
/*TableA*/
Name | QuantitySold
Apple | 5
Orange | 10
Apple | 3
Grape | 2
Banana | 6
Orange | 7
Apple | 2
Grape | 2
现在我想用相同的水果名称过滤它们并获得同时售出的每个水果的总和,创建一个新的结果DataTable
,它应该看起来像是
/*TableB*/
Name | TotalSold
Apple | 10
Orange | 17
Grape | 4
Banana | 6
我怎么能实现这个目标?
我找到了不同水果名称的数量int distinctCt = TableA.AsEnumerable()
.Select(row=>row.Field<string>("Name"))
.Distinct().Count();
但我意识到这不会从这里开始。 有人可以告诉我如何做到这一点吗?
答案 0 :(得分:1)
使用GroupBy
和Sum
:
var nameGroups = TableA.AsEnumerable().GroupBy(r => r.Field<string>("Name"));
var TableB = TableA.Clone();
TableB.Columns["QuantitySold"].ColumnName = "TotalSold";
foreach(var g in nameGroups)
{
TableB.Rows.Add(g.Key, g.Sum(r => r.Field<int>("QuantitySold")));
}
答案 1 :(得分:0)
你需要使用GroupBy,试试这个:
var x = TableA.AsEnumerable()
.GroupBy(r=>r.Field<string>("Name"))
.Select(sm => new
{
Name = sm.First().Field<string>("Name"),
QuamtitySold = sm.Sum(q => q.Field<int>("QuantitySold"))
});