如何合并具有相似数据的行

时间:2013-07-15 08:37:05

标签: c# .net datatable

我有一个包含3列(名字,姓氏,年龄)的数据表,我想浏览它并查找具有相同名字和姓氏的行,并用一行代替它们相同的名字和姓氏。至于年龄栏我想把所有年龄都放在一个单元格中并用“|”分隔它们或';'。

在:

John#Doe#24

John#Doe#35

之后:

John#Doe#24 | 35

1 个答案:

答案 0 :(得分:2)

您可以使用System.Data.DataSetExtensions.dll程序集中的LINQ和扩展名({3}}来对行进行分组并加入您想要的值:

        var dt=new DataTable();
        dt.Columns.Add("A", typeof (string));
        dt.Columns.Add("B", typeof (string));
        dt.Columns.Add("C", typeof (int));

        dt.Rows.Add("John", "Doe", 23);
        dt.Rows.Add("John", "Doe", 24);
        dt.Rows.Add("John", "Doe", 25);

        var result = from row in dt.AsEnumerable()
                     group row by new {A=row.Field<string>("A"), B=row.Field<string>("B")} into grp
                     select new
                     {
                         CustomerName = grp.Key,
                         Items = String.Join(",",grp.Select(r=>r.Field<int>("C")))
                     };
        foreach (var t in result)
            Console.WriteLine(t.CustomerName + " " + t.Items);

诀窍是要意识到你问的是如何对数据进行分组,然后使用Count()或Sum()之外的其他东西来聚合值列

你会在SO中找到许多问题,询问如何对DataTable行进行分组,例如。您可以使用DataRowExtensions作为参考来制作更复杂的分组