在c#中添加数据表的类似行

时间:2014-05-19 05:36:35

标签: c# ado.net

我有一个数据表,其中填充了多个数据。需要检查在不同行中包含相同值的列,并将所有相似的行添加到同一数据表中的一行。

例如,

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行。

1 个答案:

答案 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;) - 根据您的需求。 我假设有源数据的行应保留在表中。