我合并了两个相似的表,其中我有2个字段(ID和Quantity),最后得到一个表,我可以为同一个ID创建多个记录 . 我希望结果表每个ID只有1条记录,同时为每个ID提供各自的数量 . 经过长时间的Google搜索,我想出了这段代码:
DataTable dt1 = new DataTable("Table1");
DataTable dt2 = new DataTable("Table2");
dt1.Columns.Add("ID", typeof(Int32));
dt1.Columns.Add("Quantity", typeof(Int32));
dt1.Rows.Add(new object[] { 1, 1 });
dt1.Rows.Add(new object[] { 2, 2 });
dt1.Rows.Add(new object[] { 3, 3 });
dt1.Rows.Add(new object[] { 4, 4 });
dt2.Columns.Add("ID", typeof(Int32));
dt2.Columns.Add("Quantity", typeof(Int32));
dt2.Rows.Add(new object[] { 1, 100 });
dt2.Rows.Add(new object[] { 3, 100 });
dt2.Rows.Add(new object[] { 4, 100 });
dt1.Merge(dt2);
var datas = dt1.AsEnumerable()
.GroupBy(r => new { Col1 = r["ID"] })
.Select(g => g.First()["Quantity"] = g.Sum(x => int.Parse(x["Quantity"].ToString())))
.ToList();
dt1 = dt1.AsEnumerable().GroupBy(r => new { Col1 = r["ID"] })
.Select(x => x.First()).CopyToDataTable();
但是,我觉得有一种方法可以更有效地执行此操作,因为在这种情况下,表会被扫描两次 . 有没有人有什么建议?
还有一件事,作为一个奖金问题,我希望在整个结果表中找到总数量,理想的是以有效的方式(即WHILE分组) .
UPDATE: 是的我知道,DataTable不是一个明智的数据结构,但由于我们项目的性质,我被迫与他们合作 . 我非常感谢有关如何在这里使用中间数据结构的建议,但最后我需要一个DataTable .
1 回答
你需要这样的东西,你可以在结尾处使用字典,结果将存储在字典中 .