【问题标题】:how to merge rows with similar data如何合并具有相似数据的行
【发布时间】:2013-07-15 08:37:05
【问题描述】:

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

之前:

约翰 #Doe #24

约翰 #Doe #35

之后:

约翰 #Doe #24|35

【问题讨论】:

  • 老实说我一无所知,我想将数据表转换为列表。但我不确定这是否是最好的方法

标签: c# .net datatable


【解决方案1】:

您可以使用 LINQ 和 System.Data.DataSetExtensions.dll 程序集中的扩展(如 DataRowExtensions)对行进行分组并加入您想要的值,如下所示:

        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 行进行分组的问题,例如。 this one 可以作为参考来进行更复杂的分组

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多