这应该工作:
var query = table.AsEnumerable()
.GroupBy(row => new { Name = row.Field<string>("Name"), Code = row.Field<string>("Code") });
var table2 = table.Clone(); // empty table with same schema
foreach (var x in query)
{
string name = x.Key.Name;
string code = x.Key.Code;
int count = x.Sum(r => r.Field<int>("Count"));
table2.Rows.Add(x.Key.Name, x.Key.Code, count);
}
编辑:如果你不是要修改的原始表和汇总每个每个计名称代码组,使用这种方法,它采用了Dictionary
作为查找:
var nameCodeCountLookup = table.AsEnumerable()
.GroupBy(row => new { Name = row.Field<string>("Name"), Code = row.Field<string>("Code") })
.ToDictionary(ncGrp => ncGrp.Key, ncGrp => ncGrp.Sum(r => r.Field<int>("Count")));
foreach (DataRow row in table.Rows)
{
string Name = row.Field<string>("Name");
string Code = row.Field<string>("Code");
row.SetField("Count", nameCodeCountLookup[new { Name, Code }]);
}
但是,我不知道为什么你的RESU lt表包含此行:
User1 | q3 | 0
原始表中没有名称代码组合User1 + q3。
嗨,蒂姆,感谢您的回复,但第一个代码抛出错误 - “指定的演员无效”绑定到表2 – user3240893
@ user3240893:那么列'Count'不是'int'列,但(我猜)一个字符串列。改变这一点。 –
User1 | q3 | 0;我想为输入表 – user3240893