我有一个数据表,其中填充了多个数据。需要检查在不同行中包含相同值的列,并将所有相似的行添加到同一数据表中的一行。
例如,id pid pname pAmountex vat vat 1 4 t1 123 2 2 3 t2 45 3 3 4 t3 56 7 4 3 t4 23 8
在上表中,pid列具有类似的值4& 3。我需要总结pid 4的第1行和第3行的pamountex,vat列,并为pid 3总结2行和3行。答案 0 :(得分:0)
以下是LINQ的示例:
DataTable dt = new DataTable();
dt.Columns.Add("id");
dt.Columns.Add("pid");
dt.Columns.Add("pname");
dt.Columns.Add("pamountex",typeof(int));
dt.Columns.Add("vat",typeof(int));
dt.Rows.Add( new object[] { 1, 4, "t1", 123, 2 } );
dt.Rows.Add( new object[] { 2, 3, "t2", 45, 3 } );
dt.Rows.Add( new object[] { 3, 4, "t3", 56, 7 } );
dt.Rows.Add( new object[] { 4, 3, "t4", 23, 8 } );
dt.AsEnumerable()
.GroupBy(r => r.Field<string>("pid") )
.Where (r => r.Count() > 1)
.Select (gr =>
new { id = 0,
pid = gr.Key,
pname = "???",
pamountex = gr.Sum (g => g.Field<int>("pamountex")),
vat = gr.Sum (g => g.Field<int>("vat"))
})
.ToList()
.ForEach( r => dt.Rows.Add(
new object[] {
r.id,
r.pid,
r.pname,
r.pamountex,
r.vat } ));
你没有指定id和pname列中保存sum的行所需的值,所以我添加了一些默认值(id = 0和pname =&#34; ???&#34;) - 根据您的需求。 我假设有源数据的行应保留在表中。